我正在使用带有 Akka TestKit 的 ScalaTest 来为我编写的演员编写单元和集成测试,以便在不改变任何内部状态的情况下简单地向另一个演员发送消息。以此为例:
class MyActor extends Actor {
val anotherActor = context.actorOf(Props[AnotherActor])
def receive: Receive = {
case MyMessage => anotherActor ! AnotherMessage
}
}
我想编写一个测试来确认由于anotherActor
处理AnotherMessage
而MyActor
处理MyMessage
。经典示例是用于TestActorRef
获取底层参与者并检查一些在收到消息时应该受到影响的内部状态,如下所示:
val testActorRef = TestActorRef(new MyActor)
"MyActor" should "change some internal state when it receives MyMessage" in {
testActorRef ! MyMessage
testActorRef.underlyingActor.someState shouldBe "altered"
}
但就我而言,我不在乎这种状态。事实上,我想避免持有任何这样的状态。TestProbe
也不是我想要的,因为您仍然需要向TestProbe.ref
被测演员注册。在大多数情况下,我查看了 Akka 测试文档 ( http://doc.akka.io/docs/akka/snapshot/scala/testing.html ) 中的所有示例,但没有找到任何合适的。