私のScalaアプリケーションでは、私にはActor A
とActor B
があります。私はA
にメッセージを送って、A
が適切にデータを処理していて、B
に正しいメッセージを送信しているかどうかを確認するために、アクターB
にどのメッセージが送信されているかを見ることができるScalaTestのテストケースを考案したいと思います。どのようにこれをテストするでしょうか?これは私自身で料理されるまでには長い時間がかかりましたが、ほとんどの場合はうまくいくようです。ScalaとAkka - Akka Testkitを使ったシステムとしてのテストアクター
class A extends Actor { ... }
class B extends Actor { ... }
class C(p: TestProbe) extends B {
override def receive = {
LoggingReceive {
case x =>
println(x.toString)
p.ref ! x
}
}
}
case class MsgToB(...)
// Spec class which extends TestKit
"A" should {
"send the right message to B" {
val p = TestProbe()
val a = TestActorRef[A]
val c = TestActorRef(Props(new C(p)))
// Assume A has a reference to C. Not shown here.
a ! msg
// Assert messages
p.expectMsgType[MsgToB]
}
}
これはこれを行うための最良の方法ですか?より良い方法がありますか?
私はこれが好きです。私は何かをしなければならなかったので、私は元の実装に行ったが、これは興味深いと思う。目標は、私たちがやっている(模擬された)サービスコールの全チェーンへのウェブリクエストを処理し、データ出力とウェブレスポンスを検証するエントリーアクターからアクターシステム全体をテストすることです。 1つの課題は、アサーションを順序付けする必要がないように非同期動作を取得することでした。これが解決すれば解決します。 – Rig