使用Akka和RabbitMQ测试系统的正确方法是什么?

时间:2013-09-11 02:48:17

标签: unit-testing scala akka acceptance-testing scalatest

我正在使用Akka和RabbitMQ进行大规模应用。

目前,对于验收和集成测试,我正在模拟通常会从被测模块发送或接收消息的actor。实际上,只需使用完全相同的RabbitMQ队列,然后注入或接收数据,然后进行验证。

这听起来是否适合确保一切都在RabbitMQ中表现出来?

另一方面,我开始使用日志记录队列来测试其他内容。我只是将各种日志消息路由到它,然后读取队列以了解正在发生的事情。例如,如果我想测试某些东西是否在做什么,我只需要一个函数LogThis("Entered: Method Name"),然后读取放置消息的队列,看它是否发生。

这听起来像个好主意吗?我的想法是即使在单元测试中我也这样做。其他一切都被嘲笑了,但我正在使用该方法验证某些难以测试区域的正确行为。只需阅读日志数据流,看看它是否正在按我的意愿行事。

我接受了这个想法,因为当我听到调试级别的日志文件队列并获得相同的信息(只要我保证我的日志记录是这样)时,它似乎比使用Akka测试工具包遇到各种麻烦要容易得多只准确记录)

1 个答案:

答案 0 :(得分:0)

对于rabbitMq,我的建议是使用真正的RabbiMQ:这可以通过使用Vagrant和chef来配置RabbitMq和Vagrant maven插件来在Integration测试之前启动Box并在集成测试的后期停止它:

Vagrant Maven插件:http://nicoulaj.github.io/vagrant-maven-plugin/

Vagrant WebSite:http://www.vagrantup.com/

RabbitMQ的食谱师傅:https://github.com/opscode-cookbooks/rabbitmq

总结一下你必须:

  1. 安装Vagrant并创建一个空Box(Centos或Ubunutu)。
  2. 使用rabbitMQ cookbook配置VM。
  3. 将.box放入您的主文件夹(rabbitMQ.box)。
  4. 配置maven Project以在集成测试的前期阶段启动带有vagrant up(〜/ rabbitMQ.box)的VM。
  5. 在集成测试的前期阶段,将maven Project配置为使用vagrant halt(〜/ rabbitMQ.box)停止VM。
  6. 这样你的测试就会被隔离。

    希望这个帮助