Акка актер тестирование

Поскольку в настоящее время я пишу тестовые сценарии для моего приложения Akka ( http://doc.akka.io/docs/akka/snapshot/scala/testing.html), мне было интересно, есть ли способ проверить интерфейс актера. Что я имею в виду, это то, что я хотел бы проверить, обрабатывает ли метод приема целевого субъекта сообщение A или нет. Представьте себе следующий сценарий:

Актер A может обрабатывать сообщения b и c. Актер B хочет отправить сообщение b и a субъекту A. Чтобы убедиться, что это работает хорошо, я хотел бы написать тестовый пример, который гарантирует, что субъект A обрабатывает сообщения a и b.

1 ответ

Решение

Это зависит от того, что вы хотите проверить.

Так как receive метод является PartialFunction, ты можешь сделать isDefinedAt тесты вроде так:

$ sbt test:console
scala> import akka.actor._
scala> import akka.testkit._
scala> class MyActor extends Actor {
         def receive = {
           case n: Long => println("Got %d".format(n))
           case s: String => println("Got %s".format(s))
         }
       }

scala> implicit val system = ActorSystem()
system: akka.actor.ActorSystem = akka://default

scala> val myActor = TestActorRef[MyActor]
myActor: akka.testkit.TestActorRef[MyActor] = TestActor[akka://default/user/$$a]

scala> val underlying = myActor.underlyingActor
underlying: MyActor = MyActor@365d7762

scala> underlying.receive.isDefinedAt(123L)
res0: Boolean = true

scala> underlying.receive.isDefinedAt("banana")
res1: Boolean = true

scala> underlying.receive.isDefinedAt(true)
res2: Boolean = false

scala> underlying.receive.isDefinedAt(123)
res3: Boolean = false

scala> underlying.receive.isDefinedAt(null)
res4: Boolean = false

scala> system.shutdown()
Другие вопросы по тегам