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());
}
}
希望这会有所帮助!
我正在使用 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());
}
}
希望这会有所帮助!