我正在尝试编写我的第一个Akka测试并浏览文档。我正在运行它的第一个example并收到以下错误:
[ERROR] [10/26/2017 14:08:55.371] [IngestionWorkerActorSpec-akka.actor.default-dispatcher-4] [akka:// IngestionWorkerActorSpec / user / $ b] 断言失败:在等待测试消息期间在expectMsg期间超时(3秒) java.lang.AssertionError:断言失败:在等待测试消息期间在expectMsg期间超时(3秒)
以下是我的测试演员的接收方法:
override def receive: Receive = {
case p: ProducerRecord[_,_] =>
sendChannel.send(p.value())
case _ => logger.error("Unknown type Producer Record Received.")
}
Testspec:
val uutActor =system.actorOf(IngestionWorkerActor.props(config, KafkaProducer))
"An actor must send " should {
"send back messages unchanged" in {
uutActor ! expected
Thread.sleep(50)
expectMsg(expected)
}
}
我想测试我的演员是否收到发送给它的消息,之后我想修改它以查看我是否收到特定消息。任何帮助表示赞赏。
答案 0 :(得分:1)
expectMsg(something)
表示该演员将回复something
至sender()
(当您发送消息时被!
的隐式参数捕获),它不会反思演员收到的消息。
最佳做法是避免尝试编写调查角色内部的测试,而是验证它们在发送消息时的行为方式。在这种情况下,可能是在那里放置一个模拟sendChannel
并验证是否在其上发送了正确的值。