12

次のアクターと機能が似ているアクターがあります。

case class SupervisingActor() extends Actor {

    protected val processRouter = //round robin router to remote workers
    override def receive = {
        case StartProcessing => { //sent from main or someplace else
            for (some specified number of process actions ){
                processRouter ! WorkInstructions
            }
        }
        case ProcessResults(resultDetails) => {  //sent from the remote workers when they complete their work
            //do something with the results
            if(all of the results have been received){
                //*********************
                self ! EndProcess  //This is the line in question
                //*********************
            }
        }
        case EndProcess {
            //do some reporting
            //shutdown the ActorSystem
        }
    }
}

}

EndProcess メッセージがテストで自分自身に送信されることを確認するにはどうすればよいですか?

私は scalatest 2.0.M4、Akka 2.0.3、および Scala 1.9.2 を使用しています。

4

3 に答える 3

15

自分自身に送信するアクターは、そのアクターが特定の機能をどのように実行するかについて非常に親密な詳細であるため、メッセージが配信されたかどうかよりも、そのメッセージの効果をテストしたいと思います。自分自身に送信することは、従来の OOP のオブジェクトにプライベート ヘルパー メソッドを設定することと同じであると私は主張します。それが呼び出されるかどうかもテストせず、最終的に正しいことが起こったかどうかをテストします。

補足として: 独自のメッセージ キュー タイプを実装することもできます ( https://doc.akka.io/docs/akka/snapshot/mailboxes.html#creating-your-own-mailbox-typeを参照)。メッセージ送信の検査または追跡。このアプローチの優れた点は、テスト対象のアクターに設定するだけで挿入できることです。

于 2012-09-19T09:04:10.097 に答える
0

過去に、!デバッグ/ロギングを追加できるように、の実装をオーバーライドしました。スーパーを呼び出すだけです。完了したら、例外をスローするようなことをしないように特に注意してください。

于 2012-09-18T20:38:50.543 に答える