RabbitMQ 的 JUnit 测试

JUnit Tests for RabbitMQ

我正在使用 RabbitMQ 和 Spring 构建一个应用程序:到目前为止一切顺利。 为了定义单元测试,我使用了针对外部服务器的 JUnit。 我想知道的是,是否有一种方法可以模拟 RabbitMQ 服务器来执行测试,如果有不止一种方法,那是最好的方法。

我发现了一些帖子,但它们是在 2012 年甚至更早的时候发布的……也许有更新、更简单、更有效的东西!

提前致谢

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

我们在框架本身的测试中广泛使用模拟;探索 tests 的想法。在 RabbitTemplate 方面还算不错,但对侦听器容器的模拟更为复杂。

不过,在某些情况下,需要真正的集成测试,在这种情况下,如果没有本地 rabbitmq 代理,我们会使用 JUnit @Rule 忽略测试。

为了在 Java 世界中模拟 RabbitMQ,我正在构建一个库:rabbitmq-mock

目的正是您描述的用例。您可以简单地替换 amqp-client ConnectionFactory 并且您将拥有大部分 RabbitMQ 功能开箱即用,无需使用 IO(不需要端口绑定)并且无需启动时间.

只需在 pom.xml 中添加 dependendy:

<dependency>
    <groupId>com.github.fridujo</groupId>
    <artifactId>rabbitmq-mock</artifactId>
    <version>1.0.14</version>
    <scope>test</scope>
</dependency>

然后您可以通过替换您通过 Spring 配置或 Spring-Boot 为您提供的 ConnectionFactory 来使用它:

@Configuration
@Import(AppConfiguration.class)
class TestConfiguration {
    @Bean
    ConnectionFactory connectionFactory() {
        return new CachingConnectionFactory(new MockConnectionFactory());
    }
}

希望这会有所帮助!