2016-03-29 15 views
2

を廃止予定ので、私はテストのように持っている:私はisTerminatedが廃止されていることを警告を拾ってるアッカの俳優isTerminatedちょうど俳優が特定の条件下でシャットダウンしたことを確認するためにユニットテストを書く

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

。ヒントでは、context.watch()を使用することをお勧めしますが、単体テストでは、私は親の俳優や見るべきコンテキストがありません。

有効性を確認する方法は何ですかtddTestActorはシャットダウンしますか?

+0

グレート答え:

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

を次に、アッカのTestKitと組み合わせてspecs2を使用して、私はそうのような停止動作をテストすることができ、次のように私は非常に単純なActorが定義されていたと言います()を使って俳優を見て、expectTerminated()でテストします。 – Exie

答えて

2

私はこれを行うための最善の方法は見ていることに同意します。私が停止行動をテストするとき、私は通常、ウォッチャーとしてTestProbeを使用して、テスト中の私の俳優をチェックします。 TestProbeを使用し、cmbaxterによって

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

} 
関連する問題