私は親アクターをAkkaに持っていますが、それは初期化時に子アクターを直接作成します。親アクターの単体テストを書きたいとき、どのようにして子アクターをTestProbeやモックに置き換えることができますか?以下の不自然なコードサンプルと例えばAkkaシステムをテストするために子供の俳優を模擬する方法は?
、:
class TopActor extends Actor {
val anotherActor = context.actorOf(AnotherActor.props, "anotherActor")
override def receive: Receive = {
case "call another actor" => anotherActor ! "hello"
}
}
class AnotherActor extends Actor {
override def recieve: Receive = {
case "hello" => // do some stuff
}
}
私はAnotherActorに送信されたメッセージを確認するために、TopActorのためのテストを書きたい場合は、「こんにちは」で、どのように私はの実装を置き換えますかAnotherActor? TopActorがこの子を直接作成するように見えるので、これはアクセスが容易ではありません。
が、このソリューションには他の答えはないと私はupvoteを得たように、私は私がすると思います:私は親-俳優がどのように動作するかをテストしたいと彼がそれに送信することは、子供の場合、私はコードの下に使用します私自身の答えを受け入れる:) –
あなたの 'testTopActor.underlyingActor'は' anotherActor'と 'TopActor.anotherActor'の両方を持っています。 'anotherActor'がコンストラクタやライフサイクル関数で何もしていない場合でも、何かが実行中であれば問題ありません。ネットワーク/データベース接続をコンストラクタで(私はそれが悪いことを知っているが、ポイントを説明するためだけです)、あなたは 'testTopActor'を作成するときに2つのそのような操作を実行させます。おそらく、そのようなことに注意するのは良いことです。 – CrazyGreenHand