ScalaTest と Akka TestKit を使用して、内部状態を変更せずに別のアクターにメッセージを送信するようにコード化したアクターの単体テストと統合テストを作成しています。たとえば、次のようにします。
class MyActor extends Actor {
val anotherActor = context.actorOf(Props[AnotherActor])
def receive: Receive = {
case MyMessage => anotherActor ! AnotherMessage
}
}
processingの結果として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 ) のすべての例を見てきましたが、適切なものは見つかりませんでした。