【问题标题】:How to test Akka Persistence actor如何测试 Akka Persistence 演员
【发布时间】:2016-02-03 08:10:16
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 信息量很大——我将继续使用这种方法。我是否必须复制我的主要application.conf 中的所有内容,或者我可以简单地提供覆盖吗?目前,我正在做的只是日志配置,但我提前想知道何时最终添加更多配置。我不喜欢注入 persistenceId 的概念,但如果这是我能做的最好的事情,那就是这样。
    • @mattinbits 你能发布一个不需要手动清理日志的例子吗?它是由内存插件处理的吗?
    • @SaKou 它的本质是在记忆中。一旦进程死亡,该进程的内存就不会持续存在。
    • 你能给我发一些关于这个的有利链接吗?
    猜你喜欢
    • 2014-03-09
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多