java - 涉及rabbitmq的集成测试

标签 java spring rabbitmq

我需要有关如何编写涉及rabbitMQ消息代理的集成测试的帮助。

这是整个系统架构

服务(生产者)-->消息代理(环境1)--> Controller (我们的应用程序)-->消息代理(环境2)-->消费者设备

我计划将我的集成测试程序置于服务级别,其中我将模仿要发送到消息代理的消息。稍后我将监听响应并断言它。

虽然它是一个异步系统,但测试同步方式似乎是一种简单的方法。

有没有更好的方法来对我的应用程序流程进行集成测试。您能给我一些集成测试的指导吗?

谢谢 巴拉。

最佳答案

在我看来,这很大程度上取决于您到底想测试什么。 一般来说,您的应用程序使用者应该有一些像“onMessage”这样的方法来获取消息,这是触发您的业务流的使用者的入口点。

如果是这样,假设这个入口点是作为一个 bean 实现的,您可以将其注入(inject)到测试类中并直接调用它,有效地绕过所有的rabbitmq集成层。

此方法的一个小警告是,您必须排除在测试上下文中加载的所有与rabbit mq相关的bean。

现在,这种方法可以让您测试单个服务的业务逻辑,这很好。

但是,当您想要测试时,它会达不到要求:

  • 消息协议(protocol)(通过线路传递的消息确实正确)
  • 集成(当生产者将消息发送到某个交换器时,消费者实际收到消息)
  • 非功能测试(例如负载测试,以确保消费者不会在负载下不堪重负)

为了解决这些问题,您可能需要考虑使用 RabbitMQ 和服务部署整个环境,并使用领域知识正确断言(例如,当消费者获取消息并处理它时 - 它会更新数据库),这样您就可以测试等待 X 秒并直接轮询数据库或通过调用服务公开的某些 API。

关于java - 涉及rabbitmq的集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60076615/

相关文章:

java - Java中可以不使用abstract关键字来定义抽象方法吗?

Spring Bean 使用 @Transactional 卡在方法上

java - JPA 继承 entitymanager.find 产生 ClassCastException

java - JDBC 连接发布问题

windows - RabbitMQ 出现 Nodedown 错误

python - 套接字错误 : timed out (Celery & RabbitMQ running in docker containers)

java - 当浏览器调用另一台服务器时,Tomcat session 共享不起作用

java - CompletableFuture.thenAccept 中使用的垃圾回收对象的可用性

java - 为什么 Java 允许在接口(interface)中嵌套类定义?

jenkins - 使用rabbitmq消费者插件配置gerrit触发器