多语言堆栈的集成测试(Java/MongoDB/RabbitMQ ...)

Seb*_*ber 9 java jvm amqp rabbitmq mongodb

我知道RabbitMQ是用Erlang编写的,因此无法像在ActiveMQ JMS代理中那样嵌入到JVM中.

但实际上有些项目是用另一种语言完成的,可以很容易地嵌入到集成测试中.

例如,使用C++编写的MongoDB可以在JVM集成测试的上下文中轻松启动/停止:https: //github.com/flapdoodle-oss/embedmongo.flapdoodle.de

也有人把它移植到Java:https: //github.com/thiloplanz/jmockmongo/


所以我只是想知道当我的应用程序是用Java编写时,我们如何进行集成测试,而另一种技术是另一种技术(如Erlang for RabbitMQ)?

一般来说,什么是良好做法?

我看到3个主要解决方案:

  • 开始真正的RabbitMQ
  • 在当前使用的Langage中嵌入该技术的JVM端口
  • 使用标准技术,以便Erlang中的技术可能具有与Java中的另一个相同的行为和通信层(RabbitMQ/Qpid/StormMQ实现AMQP)

是否有Maven/Sbt/Ant插件来启动临时RabbitMQ代理?在测试课之前支持Junit/TestNG RabbitMQ的任何项目?

我已经看到在Java中有一个AMQP的开源实现:Apache Qpid 有没有人使用这个实现进行集成测试的经验,而在生产中有RabbitMQ?它甚至可能吗?我正在使用Spring Integration.


顺便说一下,我刚刚注意到Spring-AMQP项目提到了它的github自述文件:

这里的许多"集成"测试需要运行RabbitMQ服务器 - 如果未检测到代理,它们将被跳过.

Seb*_*ber 2

根据 Philip Christiano 的回答说使用 VM,现在我们有了 Docker,我认为这是在 Docker 容器中嵌入不同技术的方法。

人们可以启动一个包含 RabbitMQ 服务器的 docker 容器,并且它比使用 VM 更快,因为 docker 容器是轻量级的并且启动时间要短得多。

有一些 Maven 插件允许启动 docker 容器,例如: http: //www.alexecollins.com/content/docker-maven-plugin/