如何测试Akka Persistence演员

时间:2015-11-03 08:39:27

标签: akka akka-persistence akka-persistent-fsm

我正在开发一个基于Akka Persistent FSM的项目。特别是:

  1. 我想知道构建独立测试用例的最佳方法是什么?由于状态更改是持久的(文档中没有很好地解释,但可以看到here),因此确保我的持久性actor始终处于干净状态可能很棘手。是否有必要手动将重置为我的actor FSM协议?如果是这样,这似乎并不理想,因为这是需要自行测试的新行为。

  2. 在测试中管理期刊本身的最佳方法是什么?有没有一种简单的方法可以配置使用不同的日志进行测试,而不必在演员设计本身中明确选择这个选项?文档的Plugin TCK部分提到手动删除整个日志文件。这对于测试插件本身似乎是合理的,但对于应用程序代码来说似乎是一种不必要的低级解决方案。也许我需要在测试中明确地调用期刊的asyncDeleteMessagesTo?这看起来仍然很低级,但也许它只是尚未构建到库中的基础架构。

1 个答案:

答案 0 :(得分:7)

当单元测试持久性actor时,您可以使用内存中持久性插件,例如https://github.com/dnvriend/akka-persistence-inmemory

无需更改代码,您可以在application.conf中使用与src/test/resources中不同的src/main/resources

为了单元测试之间的独立性,可以使persistenceId注入到actor中。为每个测试创建一个具有不同持久性Id的actor的新实例。然后,即使先前测试的事件仍然存在于内存中,它们也不会影响后续测试。

如果您使用Akka testkit,则每次测试运行都会创建一个新的actor系统,并且在系统关闭时运行结束时,内存日志的内容将被销毁,因此无需手动清理。