Как проверить актера Акка, который отправляет сообщение другому актеру?
Я использую ScalaTest с Akka TestKit для написания модульных и интеграционных тестов для актера, которого я закодировал, чтобы просто отправить сообщение другому актору без изменения внутреннего состояния. Возьмите это к примеру:
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) но не нашел ничего подходящего.