🍃前言
本次开发任务
- 测试客户端接口
🌳所需属性
所需要一共三个属性
BrokerServer:服务器
ConnectionFactory:Connection 工厂
Thread:创建一个线程执行 服务启动的线程
private BrokerServer brokerServer = null; private ConnectionFactory factory = null; private Thread t = null;
🌴@BeforeEach
这里我们实现步骤有两步:
- 启动服务器
- 配置 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
实现步骤分为两步:
- 停止服务器
- 删除必要的文件
代码实现如下:
@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 类——测试客户端》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下