【发布时间】:2017-03-26 22:53:57
【问题描述】:
我正在为基于参与者的应用程序编写测试用例。其中一个组件可以大致定义如下:
class MyActor(a: ActorRef, b: ActorRef) extends Actor {
override def receive: Receive = {
case _ =>
a ! "Got message!"
b ! "Hello!"
}
}
现在,要编写一个测试用例,我正在使用 akka-testkit 和 TestProbe。测试用例的一个重要部分如下所示:
val a = TestProbe()
val b = TestProbe()
val c = system.actorOf(Props(new MyActor(a.testActor, b.testActor)))
c ! "Message!"
a.expectMsg("Got message!")
现在的问题是测试用例通过了,即使发送到b 的消息不是预期的,因此也没有经过验证。
我知道我可以在测试用例的开头调用 b.expectNoMsg() 来解决这个特定问题,但不知何故我相信这不是一个真正可扩展的方法(我每次都必须添加它毕竟是预期的调用,这很麻烦)。
所以我的问题是:是否可以选择在严格模式下运行akka-testkit,以便每条消息都必须以某种方式预期?首选方式是通过TestKit、ActorSystem 或TestProbe 配置,但任何不需要修改每个测试用例的解决方案都可以(因此在每次通信结束时调用expectNoMsg() 不是解决方案)
【问题讨论】:
标签: scala akka actor akka-testkit