【消息队列开发】 实现 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月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
350 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
测试技术 开发者
vertx的学习总结6之动态代理类和测试
本文是Vert.x学习系列的第六部分,介绍了如何使用动态代理在事件总线上公开服务,以及如何进行Vert.x组件的异步测试,包括动态代理的创建和使用,以及JUnit 5和Vert.x测试工具的结合使用。
149 3
vertx的学习总结6之动态代理类和测试
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
241 5
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
217 2
|
消息中间件 中间件 Kafka
解锁Kafka等消息队列中间件的测试之道
在这个数字化时代,分布式系统和消息队列中间件(如Kafka、RabbitMQ)已成为日常工作的核心组件。本次公开课由前字节跳动资深专家KK老师主讲,深入解析消息队列的基本原理、架构及测试要点,涵盖功能、性能、可靠性、安全性和兼容性测试,并探讨其主要应用场景,如应用解耦、异步处理和限流削峰。课程最后设有互动答疑环节,助你全面掌握消息队列的测试方法。
|
JSON 测试技术 数据格式
单元测试问题之使用JCode5插件生成测试类如何解决
单元测试问题之使用JCode5插件生成测试类如何解决
468 3
|
Java 测试技术 Spring
单元测试问题之在 JCode5 类中使用 testService如何解决
单元测试问题之在 JCode5 类中使用 testService如何解决
111 2
|
消息中间件 安全 PHP
消息队列 MQ使用问题之如何获取PHP客户端代码
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
消息中间件 JavaScript Linux
消息队列 MQ操作报错合集之客户端在启动时遇到了连接错误,是什么原因
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。

热门文章

最新文章