如何测试Akka持久性

如何测试Akka持久性,akka,akka-persistence,akka-persistent-fsm,Akka,Akka Persistence,Akka Persistent Fsm,我在做一个基于Akka持久FSM的项目。特别是: 我想知道构建独立性测试用例的最佳方法是什么?由于状态更改是持久化的(文档中没有很好地解释这一点,但可以看到),因此要确保持久化的参与者始终以干净的状态开始,这可能会很棘手。是否需要手动将重置构建到我的actor FSM协议中?如果是这样的话,这似乎并不理想,因为这是一种新的行为,需要用户自己进行测试 在测试中管理日志本身的最佳方法是什么?有没有一种简单的方法可以配置使用不同的日志进行测试,而不必在actor设计本身中明确地进行选择?文档部分提到手

我在做一个基于Akka持久FSM的项目。特别是:

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

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


  • 当单元测试持久性参与者时,您可以使用内存中的持久性插件,例如

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

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


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

    非常有用--我将继续使用此方法。我必须复制我的主
    应用程序.conf
    中的所有内容,还是可以简单地提供覆盖?目前,日志配置是我正在做的全部工作,但我想知道我最终何时添加更多配置。我不喜欢注入
    persistenceId
    的概念,但如果这是我能做的最好的,那就是方法。@mattinbits你能发布一个不需要手动清理日志的示例吗?它是由inmemory插件处理的吗?@SaKou它的本质是在内存中。一旦这个过程消失,这个过程的记忆就不会持久。你能给我发一些关于这个的有利链接吗?