Akka 持久性测试方法

Akka persistence testing approaches

我熟悉此处定义的 Akka 测试方法:

http://doc.akka.io/docs/akka/snapshot/scala/testing.html

我了解如何使用 TestKit、TestActorRef、TestProbe 等。我还了解我的核心领域逻辑应该从 Akka 中分离出来并进行测试。

我的问题是关于在 Akka Persistence actor(即 PersistentActor 和 PersistentView)上执行 TDD 的策略。

我希望能够以相当低的开销、高效的方式测试以下类型的场景,即尽可能接近单元测试:

  1. 持久性参与者是否持久化了具有正确 ID 的事件?
  2. 我的快照恢复是否正确恢复状态?
  3. 我的视图是否读取了正确的事件?

如果有人知道一个项目可以帮助我实际看到这个,我将不胜感激。

我能想到的一种方法是测试 PersistentView,它可用于验证 PersitentActor 是否完成了它的工作。不过好像有点绕。

这不是关于测试 Akka 持久性框架本身,而是为了测试我的 Actors 是否已正确设置以使用它并且行为是否符合预期。

Ad.1 可重用的解决方案是某种具有事件总线发布功能的内存日志。这样您就可以创建一个测试探针来侦听事件总线上已发布的事件并断言它们。

Ad.2Ad.3 更多关于 如果我的演员在恢复后正确响应,我有相信它处于正确状态的理由。这样,您不仅可以验证它的内部字段是否设置正确,还可以验证它的接收方法是否因 become 更改而正确恢复。

可选地检查状态有一些消息类型,returns actor 的状态返回给发送者。它可以通过在接收方法上使用特征和覆盖来使其通用。