0
我想测试一个演员,这取决于另一个演员。在以下测试中,ActorA
将MessageA
发送到ActorB
,并且期望返回MessageB
。用TestKit测试嘲笑的演员的期望消息
由于这是一个单元测试ActorB
,我嘲笑ActorA
。我现在的问题是,我想确保ActorA
获得MessageA
,但是当我打电话给expectMsg
(请参阅注释行),整个自动驾驶仪似乎不再工作。
我在这里做错了什么?
class MyTest(_system: ActorSystem) extends TestKit(_system)
with WordSpecLike
with BeforeAndAfterAll {
object Start
object MessageA
object MessageB
def this() = this(ActorSystem("TestSpec"))
override def afterAll() {
system.shutdown()
}
// will later be mocked
class ActorA extends Actor {
def receive = {
case MessageA => sender() ! MessageB
}
}
class ActorB(actorA: ActorRef) extends Actor {
def receive = {
case Start => actorA ! MessageA
case MessageB => println("Got MessageB")
}
}
"" should {
"work" in {
val actorA = TestProbe()
actorA.setAutoPilot(new AutoPilot {
override def run(sender: ActorRef, msg: Any): AutoPilot = {
msg match {
case MessageA => sender ! MessageB
}
TestActor.KeepRunning
}
})
// this will break the test
//actorA.expectMsg(MessageA)
val actor = system.actorOf(Props(new ActorB(actorA.ref)))
actor ! Start
}
}
}