2016-03-29 14 views
2

Nur eine Unit-Test schreiben ein Schauspieler, um sicherzustellen, schaltet sich unter bestimmten Bedingungen, so habe ich ein Test wie:Akka Schauspieler isTerminated veraltet

val tddTestActor = TestActorRef[MyActor](Props(classOf[MyActor], "param1")) 
    tddTestActor ! someMessage 
    tddTestActor.isTerminated shouldBe true 

Ich empfange eine Warnung, dass isTerminated veraltet. Der Tipp empfiehlt, ich verwende context.watch(), aber in einem Komponententest habe ich keinen übergeordneten Akteur oder einen Kontext zu sehen.

Was wäre der bext Weg zu validieren tddTestActor fährt herunter?

+0

Große Antwort von cmbaxter, verwenden Sie einen TestProbe() um den Schauspieler zu sehen und dann mit expectTermined() zu testen – Exie

Antwort

2

Ich stimme zu, dass das Beobachten der beste Weg ist, dies zu erreichen. Wenn ich auf Stop-Verhalten teste, werde ich normalerweise einen TestProbe als Beobachter verwenden, um meinen getesteten Akteur zu überprüfen. Sagen wir, ich Actor definiert eine sehr einfache hatte, wie folgt:

class ActorToTest extends Actor{ 
    def receive = { 
    case "foo" => 
     sender() ! "bar" 
     context stop self 
    } 
} 

Dann mit akka ist TestKit specs2 in Kombination mit ich das Stopp-Verhalten wie so testen konnte:

class StopTest extends TestKit(ActorSystem()) with SpecificationLike with ImplicitSender{ 

    trait scoping extends Scope { 
    val watcher = TestProbe() 
    val actor = TestActorRef[ActorToTest] 
    watcher.watch(actor) 
    } 

    "Sending the test actor a foo message" should{ 
    "respond with 'bar' and then stop" in new scoping{ 
     actor ! "foo" 
     expectMsg("bar") 
     watcher.expectTerminated(actor) 
    } 
    } 

} 
Verwandte Themen