2014-02-11 4 views
1

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

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

ответ

8

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

Поскольку метод 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 = [email protected] 

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() 
+0

+1, бил меня к нему. –

+0

Член моей команды опубликовал следующий вопрос: http://stackoverflow.com/questions/21725473/creating-a-testactorref-results-in-nullpointerexception – Coxer

Смежные вопросы