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

相关文章
|
4月前
|
缓存 运维 数据库
【测试人员兼职指南】利用专业技能:如何从测试转向开发赚钱
本文分享了作者作为测试人员如何利用专业技能转向开发来兼职赚钱的经验,包括分析和解决登录页面跳转、避免重复账号注册、用户登录后首页显示用户名以及添加退出功能等问题,并提供了Django项目中使用sqlite3数据库和后台管理的扩展技巧。
138 1
【测试人员兼职指南】利用专业技能:如何从测试转向开发赚钱
|
21天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
49 1
|
23天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
37 2
|
2月前
|
测试技术 开发者
vertx的学习总结6之动态代理类和测试
本文是Vert.x学习系列的第六部分,介绍了如何使用动态代理在事件总线上公开服务,以及如何进行Vert.x组件的异步测试,包括动态代理的创建和使用,以及JUnit 5和Vert.x测试工具的结合使用。
28 3
vertx的学习总结6之动态代理类和测试
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
32 5
|
2月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
266 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
1月前
|
安全 测试技术 持续交付
云计算时代的软件开发与测试:高效、灵活、可扩展
云计算时代的软件开发与测试:高效、灵活、可扩展
|
2月前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
77 2
|
2月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
127 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
52 2
下一篇
DataWorks