我需要有关如何编写涉及rabbitMQ消息代理的集成测试的帮助。
这是整个系统架构
服务(生产者)-->消息代理(环境1)--> Controller (我们的应用程序)-->消息代理(环境2)-->消费者设备
我计划将我的集成测试程序置于服务级别,其中我将模仿要发送到消息代理的消息。稍后我将监听响应并断言它。
虽然它是一个异步系统,但测试同步方式似乎是一种简单的方法。
有没有更好的方法来对我的应用程序流程进行集成测试。您能给我一些集成测试的指导吗?
谢谢 巴拉。
最佳答案
在我看来,这很大程度上取决于您到底想测试什么。 一般来说,您的应用程序使用者应该有一些像“onMessage”这样的方法来获取消息,这是触发您的业务流的使用者的入口点。
如果是这样,假设这个入口点是作为一个 bean 实现的,您可以将其注入(inject)到测试类中并直接调用它,有效地绕过所有的rabbitmq集成层。
此方法的一个小警告是,您必须排除在测试上下文中加载的所有与rabbit mq相关的bean。
现在,这种方法可以让您测试单个服务的业务逻辑,这很好。
但是,当您想要测试时,它会达不到要求:
- 消息协议(protocol)(通过线路传递的消息确实正确)
- 集成(当生产者将消息发送到某个交换器时,消费者实际收到消息)
- 非功能测试(例如负载测试,以确保消费者不会在负载下不堪重负)
为了解决这些问题,您可能需要考虑使用 RabbitMQ 和服务部署整个环境,并使用领域知识正确断言(例如,当消费者获取消息并处理它时 - 它会更新数据库),这样您就可以测试等待 X 秒并直接轮询数据库或通过调用服务公开的某些 API。
关于java - 涉及rabbitmq的集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60076615/