我知道 RabbitMQ 是用 Erlang 编写的,因此不能像我们对 ActiveMQ JMS 代理所做的那样嵌入到 JVM 中。
但实际上有些项目是用另一种语言完成的,可以很容易地嵌入到集成测试中。
例如,用 C++ 编写的 MongoDB 可以在 JVM 集成测试的上下文中轻松启动/停止: https ://github.com/flapdoodle-oss/embedmongo.flapdoodle.de
还有人将其移植到 Java: https ://github.com/thiloplanz/jmockmongo/
所以我只是想知道当我的应用程序是用 Java 编写的,而另一种技术是另一种语言(比如用于 RabbitMQ 的 Erlang)时,我们如何进行集成测试?
一般来说,有哪些好的做法?
我看到 3 个主要解决方案:
- 启动一个真正的 RabbitMQ
- 在当前使用的语言中嵌入技术的 JVM 端口
- 使用标准技术,以便 Erlang 中的一种技术可能具有与 Java 中的另一种技术相同的行为和通信层(RabbitMQ / Qpid / StormMQ 实现 AMQP)
是否有用于启动临时 RabbitMQ 代理的 Maven/Sbt/Ant 插件?在测试课之前有任何支持 Junit/TestNG RabbitMQ 的项目吗?
我已经看到在 Java 中有一个 AMQP 的开源实现:Apache Qpid 在生产中有 RabbitMQ 时,有人使用这个实现进行集成测试吗?甚至可能吗?我正在使用 Spring 集成。
顺便说一句,我刚刚注意到 Spring-AMQP 项目在其 github 自述文件中提到:
Many of the "integration" tests here require a running RabbitMQ server - they will be skipped if the broker is not detected.