当前位置: 首页 > 知识库问答 >
问题:

Akka持久性测试方法

东方华晖
2023-03-14

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

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

我了解如何使用TestKit、TestActorRef、TestProbe等。我还了解我的核心域逻辑应该与Akka隔离提取和测试

我的问题是关于在Akka Persistence参与者(即PersistentActor和PersistentView)上进行TDD的策略。

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

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

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

我能想到的一种方法是有一个测试PersistentView,它可以用来验证PersistentActor是否完成了它的工作。看起来有点复杂。

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

共有1个答案

赏阳嘉
2023-03-14

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

AD.2和AD.3更多的是关于我的参与者在恢复后是否正确响应,我有理由相信它处于正确状态。这样,您不仅可以验证它的内部字段是否设置正确,还可以验证它的接收方法是否由于变得更改而正确恢复。

(可选)为了清楚地检查状态,有一些消息类型可以将参与者的状态返回给发送者。通过在receive方法上使用traits和重写,可以使其成为泛型。

 类似资料:
  • 我正在寻找从经典Akka持久化迁移到Akka持久化类型。在这里找到的Lagom留档:1说“注意:从Lagom持久化(经典)迁移到Akka持久化类型时的唯一限制是需要完全关闭集群。即使所有持久数据都是兼容的,Lagom持久化(经典)和Akka持久化类型也不能共存。” 有人知道这是否适用于服务器可能知道的所有持久实体吗?例如,我使用的服务有3个独立的持久实体。我需要一次迁移所有3个,还是可以一次迁移一

  • 我正在尝试设置一个属性,该属性将由我的功能测试中的每个方法使用。问题是它在测试之间并没有持续。 这是我的测试类: 我只希望属性在该类中的所有测试中保持不变。

  • 逻辑很简单: 创建一个演员并发送一系列事件。 根据测试停止使用Akka.actor.kill或Akka.actor.poisonkill的演员。 再次启动执行元并测试它是否已正确恢复。 我正在将它迁移到Akka2.6和“AKKA键入”,但Kill和PoisonKill不可用。

  • 我尝试了一个带有MongoDb支持的akka-persistence的“Hello-World”示例,使用这个开源https://github.com/scullxbones/akka-persistence-mongo/tree/master/rxmongo/src。下面是我的代码。但是,当我运行应用程序时,我得到了ask Timeout: Akka.Pattern.AskTimeoutExce

  • 我正在试着调试下面的错误信息,由于错误不是打印出来的根本原因,所以很难调试这里的问题是什么。我尝试改变超时,但问题似乎没有恢复。 下面是我的application.conf

  • 我使用StreamRefs在集群中的参与者之间建立流式连接。目前,在writing节点中,我手动将传入消息保存到日志文件中,但我想知道是否可以将其替换为persistent,用于写入,以及persistent,用于从Akka Persistence journal启动actor时读取。我一直在考虑用Persistent actor的