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

标签 java mongodb jvm rabbitmq amqp

我知道 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)具有相同的行为和通信层

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

我看到在 Java 中有一个 AMQP 的开源实现:Apache Qpid 在生产中有 RabbitMQ 时,有人有使用此实现进行集成测试的经验吗?有可能吗? 我正在使用 Spring Integration。


顺便说一下,我刚刚注意到 Spring-AMQP 项目在其 github 自述文件中提到:

Many of the "integration" tests here require a running RabbitMQ server - they will be skipped if the broker is not detected.

最佳答案

如果是我,我会考虑模拟有问题的堆栈组件。 What's the best mock framework for Java? (虽然不是一个很好的 Stack Overflow 问题)和 Mock Object可能会帮助您前进。

与尝试“实时测试”所有内容相比,模拟组件使测试更容易(恕我直言)。

关于java - 多语言堆栈的集成测试(Java/MongoDB/RabbitMQ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204051/

相关文章:

mongodb - 使用 Robomongo 连接到 Windows Azure VM 上的 mongoDB 服务器

python - 如何使用 python 将 JSON 存储到 mongodb 中?

mongodb - Orion发送错误消息 “connection failed, after 100 retries”

java - 在 Java 中使用列表列表

java - 使用 servlet、过滤器的 PoSTLogin Hook 功能

java - 当一个正在执行的线程中发生 stackoverflow 异常时,JVM 是否退出?

java - 如何让 JVM 使用服务器的最大(全部剩余)内存

garbage-collection - 当 JVM 无法到达安全点时如何获取 Java 堆栈

java - 使用 FragmentPagerAdapter 时 Android 崩溃

java - FreeMarker - 从毫秒中删除逗号