7

我正在使用带有 Spring 的RabbitMQ构建一个应用程序:到目前为止一切都很好。为了定义单元测试,我使用了面向外部服务器的 JUnit。我想知道是否有一种方法可以模拟 RabbitMQ 服务器来执行测试,以及是否有多种方法,这是最好的方法。

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

提前致谢

4

3 回答 3

6

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

于 2015-01-19T12:40:41.450 回答
3

我们在框架本身中广泛使用模拟进行测试;探索想法的测试。从侧面看还不错RabbitTemplate,但是对侦听器容器的模拟涉及更多。

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

于 2015-01-19T15:10:11.483 回答
1

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

目的正是您描述的用例。您可以简单地替换amqp-client ConnectionFactory,您将拥有大部分开箱即用的 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());
    }
}

希望这会有所帮助!

于 2019-01-28T07:54:58.930 回答