在我的Scala应用程序中,假设我有Actor A
和Actor B
。我想设计一个ScalaTest测试用例,使我能够向Actor A
发送一条消息,并查看它发送到Actor B
的消息,以便查看A
是否正确处理其数据并将正确的消息发送至B
。如何进行测试?对此,我自己思考了很长时间...但它似乎大部分工作都已经完成了。
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]
}
}
这是最好的方法吗?有更好的做法吗?