2017-01-17 14 views
0

私はAkkaプロジェクトの単体テストを実装しています。 InvalidActorNameExceptionなどを避けるために、あるユニットテスト内で作成されたすべてのアクターを、次のユニットテストが実行される前に停止させたいと思います。したがって、単体テストで作成された各アクタについては、最後に_system.stop(someActorRef)と呼んでいます。ただし、アクターが実際に停止するまでには時間がかかりますが、残念ながら次のユニットテストは通常​​、前のテストで実行されたアクターが実際に終了する前に実行されます。 stopメソッドで返されているFutureも、awaitStopというメソッドもありません。これを解決する方法はわかりません。現在、私は各ユニットテストの最後にThread.sleep(1000)を呼び出し、すべてのアクターがそれまでに死んでいることを願っていますが、明らかに私はこのままではいられません。 :Dすべてのアクタを停止して終了する方法を教えてください。

私はどんなヒントもありがとう!あなたは、あなたのテストの終わりにこれを試みることができる

答えて

1

val probe = TestProbe() 
probe.watch(someActorRef) 
system.stop(someActorRef) 
probe.expectMsgType[Terminated] 
//another way 
//probe.expectMsgPF() { 
// case Terminated(someActorRef) => 
//} 
+0

これは本当に面白そうだ、しかし、それはコンパイルされません: – lambdarookie

+0

を '' ''メソッドの欠落している引数リストは、[ を終了したオブジェクトに適用されますエラー]適用されていないメソッドは、関数型が必要な場合にのみ関数に変換されます。 [エラー]この変換は、 'apply'ではなく' apply _'または 'apply(_)(_、_)'と書くことで明示的にすることができます。 [エラー] probe.expectMsg(Terminated(someActorRef)) '' ' – lambdarookie

+0

私の回答を更新しました – kardapoltsev

関連する問題