2016-03-29 17 views
2

kullanımdan kaldırıldı, bu yüzden bir test gibi vardır: Ben isTerminated kullanımdan kaldırıldı belirten bir uyarı algılıyorumAkka Aktör isTerminated Sadece bir aktör belirli koşullar altında kapanır sağlamak için bir birim testi yazma

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

. Bu ipucu, context.watch() kullanmamı önerir; ancak bir birim testinde, bir ana oyuncuya veya izlemek için herhangi bir içeriğim yok.

tddTestActor doğrulamak için en yalın yol ne olurdu?

+0

Büyük cevabı: Ben şöyle durdurma davranışı test edebilir

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

Sonra specs2 kullanarak akka birlikte TestKit oluyor şu şekildedir: Ben tanımlanan Actor çok basit vardı Say() aktörü izlemek ve ardından expectTerminated ile test etmek() – Exie

cevap

2

İzlemenin bunu yapmanın en iyi yolu olduğuna katılıyorum. Durma davranışını test ettiğimde, genellikle izleyicimi test etmek için izleyici olarak bir TestProbe kullanacağım. Bir TestProbe kullanın cmbaxter tarafından

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) 
    } 
    } 

} 
İlgili konular