RabbitMQ的JUnit测试

llycmphe  于 2022-11-11  发布在  RabbitMQ
关注(0)|答案(4)|浏览(158)

我正在使用RabbitMQ和Spring构建应用程序:到目前为止一切都很好。为了定义单元测试,我使用了面向外部服务器的JUnit。我想知道的是,是否有一种方法可以模拟RabbitMQ服务器来执行测试,以及是否有多种方法,哪一种是最好的。
我发现周围的一些职位,但他们是在2012年,甚至更早...也许有一些更新,更容易和更有效的!
先谢谢你

fjnneemd

fjnneemd1#

我不会试图嘲笑RabbitMQ服务器本身;相反,模拟发布方法、通道工厂等,以便模拟错误条件(当然还有正确的路径)。例如,当FoozleEvent.publish方法抛出IOError时会发生什么?

dzjeubhm

dzjeubhm2#

我们在框架本身的测试中广泛使用模拟;在RabbitTemplate方面还不错,但是对侦听器容器的模仿更复杂。
但是,在某些情况下,需要进行真实的的集成测试,在这种情况下,如果没有本地rabbitmq代理,我们将使用JUnit @Rule来忽略测试。

aamkag61

aamkag613#

为了在Java世界中模拟RabbitMQ,我正在构建一个库:rabbitmq-mock
您可以简单地替换amqp-clientConnectionFactory,您将拥有大多数开箱即用的RabbitMQ特性,而无需使用IO(不需要端口绑定),也无需启动时间。
只需在您的pom.xml中添加依赖项即可:

<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());
    }
}

希望这会有所帮助!

ctehm74n

ctehm74n4#

另一种方法不是模拟RabbitMQ服务器本身,而是模拟外部RabbitMQ服务器另一端的依赖服务。
例如,您可以使用Traffic Parrot,它可以作为CI/CD管道的一部分在Docker容器中运行。
下面是一个video demo,说明如何使用该工具将模拟响应消息发送到aysnc request/response pattern中的RabbitMQ队列。
第一次

相关问题