【消息队列开发】 实现 MqClientTests 类——测试客户端

简介: 【消息队列开发】 实现 MqClientTests 类——测试客户端

🍃前言

本次开发任务

  • 测试客户端接口

🌳所需属性

所需要一共三个属性

BrokerServer:服务器

ConnectionFactory:Connection 工厂

Thread:创建一个线程执行 服务启动的线程

private BrokerServer brokerServer = null;
private ConnectionFactory factory = null;
private Thread t = null;

🌴@BeforeEach

这里我们实现步骤有两步:

  1. 启动服务器
  2. 配置 ConnectionFactory

这里注意,我们在启动服务器的时候,由于服务器启动后,就会一直循环下去,就不会执行到后面的配置 ConnectionFactory了,所以我们这里得另起一个线程来启动服务器。

代码实现如下:

@BeforeEach
public void setUp() throws IOException {
    // 1. 先启动服务器
    MqApplication.context = SpringApplication.run(MqApplication.class);
    brokerServer = new BrokerServer(9090);
    t = new Thread(() -> {
        // 这个 start 方法会进入一个死循环. 使用一个新的线程来运行 start 即可!
        try {
            brokerServer.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    });
    t.start();
    // 2. 配置 ConnectionFactory
    factory = new ConnectionFactory();
    factory.setHost("127.0.0.1");
    factory.setPort(9090);
}

🌲@AfterEach

实现步骤分为两步:

  1. 停止服务器
  2. 删除必要的文件

代码实现如下:

@AfterEach
    public void tearDown() throws IOException {
        // 停止服务器
        brokerServer.stop();
        // t.join();
        MqApplication.context.close();
        // 删除必要的文件
        File file = new File("./data");
        FileUtils.deleteDirectory(file);
        factory = null;
    }

🎍API测试

API 部分我们调用,再使用判断即可。

这里就不一一讲解了,代码实现如下:

@Test
public void testConnection() throws IOException {
    Connection connection = factory.newConnection();
    Assertions.assertNotNull(connection);
}
@Test
public void testChannel() throws IOException {
    Connection connection = factory.newConnection();
    Assertions.assertNotNull(connection);
    Channel channel = connection.createChannel();
    Assertions.assertNotNull(channel);
}
@Test
public void testExchange() throws IOException {
    Connection connection = factory.newConnection();
    Assertions.assertNotNull(connection);
    Channel channel = connection.createChannel();
    Assertions.assertNotNull(channel);
    boolean ok = channel.exchangeDeclare("testExchange", ExchangeType.DIRECT, true, false, null);
    Assertions.assertTrue(ok);
    ok = channel.exchangeDelete("testExchange");
    Assertions.assertTrue(ok);
    // 此处稳妥起见, 把改关闭的要进行关闭.
    channel.close();
    connection.close();
}
@Test
public void testQueue() throws IOException {
    Connection connection = factory.newConnection();
    Assertions.assertNotNull(connection);
    Channel channel = connection.createChannel();
    Assertions.assertNotNull(channel);
    boolean ok = channel.queueDeclare("testQueue", true, false, false, null);
    Assertions.assertTrue(ok);
    ok = channel.queueDelete("testQueue");
    Assertions.assertTrue(ok);
    channel.close();
    connection.close();
}
@Test
public void testBinding() throws IOException {
    Connection connection = factory.newConnection();
    Assertions.assertNotNull(connection);
    Channel channel = connection.createChannel();
    Assertions.assertNotNull(channel);
    boolean ok = channel.exchangeDeclare("testExchange", ExchangeType.DIRECT, true, false, null);
    Assertions.assertTrue(ok);
    ok = channel.queueDeclare("testQueue", true, false, false, null);
    Assertions.assertTrue(ok);
    ok = channel.queueBind("testQueue", "testExchange", "testBindingKey");
    Assertions.assertTrue(ok);
    ok = channel.queueUnbind("testQueue", "testExchange");
    Assertions.assertTrue(ok);
    channel.close();
    connection.close();
}
@Test
public void testMessage() throws IOException, MqException, InterruptedException {
    Connection connection = factory.newConnection();
    Assertions.assertNotNull(connection);
    Channel channel = connection.createChannel();
    Assertions.assertNotNull(channel);
    boolean ok = channel.exchangeDeclare("testExchange", ExchangeType.DIRECT, true, false, null);
    Assertions.assertTrue(ok);
    ok = channel.queueDeclare("testQueue", true, false, false, null);
    Assertions.assertTrue(ok);
    byte[] requestBody = "hello".getBytes();
    ok = channel.basicPublish("testExchange", "testQueue", null, requestBody);
    Assertions.assertTrue(ok);
    ok = channel.basicConsume("testQueue", true, new Consumer() {
        @Override
        public void handleDelivery(String consumerTag, BasicProperties basicProperties, byte[] body) throws MqException, IOException {
            System.out.println("[消费数据] 开始!");
            System.out.println("consumerTag=" + consumerTag);
            System.out.println("basicProperties=" + basicProperties);
            Assertions.assertArrayEquals(requestBody, body);
            System.out.println("[消费数据] 结束!");
        }
    });
    Assertions.assertTrue(ok);
    Thread.sleep(500);
    channel.close();
    connection.close();
}

⭕总结

关于《【消息队列开发】 实现 MqClientTests 类——测试客户端》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

相关文章
|
11天前
|
测试技术 Python
单元测试是软件开发中测试的最小单位
单元测试是软件开发中测试的最小单位
|
6天前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
21 3
|
19天前
|
运维 监控 大数据
部署-Linux01,后端开发,运维开发,大数据开发,测试开发,后端软件,大数据系统,运维监控,测试程序,网页服务都要在Linux中进行部署
部署-Linux01,后端开发,运维开发,大数据开发,测试开发,后端软件,大数据系统,运维监控,测试程序,网页服务都要在Linux中进行部署
|
21天前
|
jenkins 数据管理 测试技术
在LabVIEW开发生命周期中提高代码质量的自动化测试方法
在LabVIEW开发生命周期中提高代码质量的自动化测试方法
16 0
|
21天前
|
数据采集 数据可视化 数据管理
LabVIEW开发实验室超导体电流特性测试系统
LabVIEW开发实验室超导体电流特性测试系统
10 0
|
23天前
|
JSON JavaScript 测试技术
Postman接口测试工具详解
Postman接口测试工具详解
33 1
|
13天前
|
XML JSON 测试技术
Postman接口测试工具详解
📚 Postman全攻略:API测试神器!📚 发送HTTP请求,管理集合,写测试脚本,集成CI/CD。从安装配置到环境变量、断言、数据驱动测试,一步步教你如何高效测试RESTful API。实战案例包含GET、POST、PUT、DELETE请求。用Newman在命令行跑集合,自动化测试不发愁!👉 [洛秋小站](https://www.luoqiu.site/) 学更多!🚀
28 1
|
20天前
|
数据采集 测试技术
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
21 2
|
28天前
|
存储 JSON 测试技术
软件测试之 接口测试 Postman使用(下)
软件测试之 接口测试 Postman使用(下)
24 2
|
28天前
|
测试技术 数据格式
软件测试之 接口测试 Postman使用(上)
软件测试之 接口测试 Postman使用(上)
26 1