我正在使用RabbitMQ和Spring构建应用程序:到目前为止一切都很好。为了定义单元测试,我使用了面向外部服务器的JUnit。我想知道的是,是否有一种方法可以模拟RabbitMQ服务器来执行测试,以及是否有多种方法,哪一种是最好的。我发现周围的一些职位,但他们是在2012年,甚至更早...也许有一些更新,更容易和更有效的!先谢谢你
fjnneemd1#
我不会试图嘲笑RabbitMQ服务器本身;相反,模拟发布方法、通道工厂等,以便模拟错误条件(当然还有正确的路径)。例如,当FoozleEvent.publish方法抛出IOError时会发生什么?
FoozleEvent.publish
IOError
dzjeubhm2#
我们在框架本身的测试中广泛使用模拟;在RabbitTemplate方面还不错,但是对侦听器容器的模仿更复杂。但是,在某些情况下,需要进行真实的的集成测试,在这种情况下,如果没有本地rabbitmq代理,我们将使用JUnit @Rule来忽略测试。
RabbitTemplate
@Rule
aamkag613#
为了在Java世界中模拟RabbitMQ,我正在构建一个库:rabbitmq-mock。您可以简单地替换amqp-clientConnectionFactory,您将拥有大多数开箱即用的RabbitMQ特性,而无需使用IO(不需要端口绑定),也无需启动时间。只需在您的pom.xml中添加依赖项即可:
ConnectionFactory
<dependency> <groupId>com.github.fridujo</groupId> <artifactId>rabbitmq-mock</artifactId> <version>1.0.14</version> <scope>test</scope> </dependency>
然后,您可以通过替换您通过Spring配置提供的ConnectionFactory或Spring-Boot为您提供的ConnectionFactory来使用它:
@Configuration @Import(AppConfiguration.class) class TestConfiguration { @Bean ConnectionFactory connectionFactory() { return new CachingConnectionFactory(new MockConnectionFactory()); } }
希望这会有所帮助!
ctehm74n4#
另一种方法不是模拟RabbitMQ服务器本身,而是模拟外部RabbitMQ服务器另一端的依赖服务。例如,您可以使用Traffic Parrot,它可以作为CI/CD管道的一部分在Docker容器中运行。下面是一个video demo,说明如何使用该工具将模拟响应消息发送到aysnc request/response pattern中的RabbitMQ队列。第一次
4条答案
按热度按时间fjnneemd1#
我不会试图嘲笑RabbitMQ服务器本身;相反,模拟发布方法、通道工厂等,以便模拟错误条件(当然还有正确的路径)。例如,当
FoozleEvent.publish
方法抛出IOError
时会发生什么?dzjeubhm2#
我们在框架本身的测试中广泛使用模拟;在
RabbitTemplate
方面还不错,但是对侦听器容器的模仿更复杂。但是,在某些情况下,需要进行真实的的集成测试,在这种情况下,如果没有本地rabbitmq代理,我们将使用JUnit
@Rule
来忽略测试。aamkag613#
为了在Java世界中模拟RabbitMQ,我正在构建一个库:rabbitmq-mock。
您可以简单地替换amqp-client
ConnectionFactory
,您将拥有大多数开箱即用的RabbitMQ特性,而无需使用IO(不需要端口绑定),也无需启动时间。只需在您的pom.xml中添加依赖项即可:
然后,您可以通过替换您通过Spring配置提供的ConnectionFactory或Spring-Boot为您提供的ConnectionFactory来使用它:
希望这会有所帮助!
ctehm74n4#
另一种方法不是模拟RabbitMQ服务器本身,而是模拟外部RabbitMQ服务器另一端的依赖服务。
例如,您可以使用Traffic Parrot,它可以作为CI/CD管道的一部分在Docker容器中运行。
下面是一个video demo,说明如何使用该工具将模拟响应消息发送到aysnc request/response pattern中的RabbitMQ队列。
第一次