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