0

我正在尝试编写我的第一个 Akka 测试并浏览文档。我正在运行它的第一个示例并收到以下错误:

[错误] [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.")
}

测试规格:

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)
}
}

我想测试我的演员是否收到发送给它的消息,后来我想修改它以查看我是否收到特定消息。任何帮助表示赞赏。

4

1 回答 1

1

expectMsg(something)意味着参与者将回复somethingto sender()(在您发送消息时由隐式参数捕获!),它不会内省参与者接收到的消息。

最佳实践是避免尝试编写查看参与者内部的测试,而是验证它们在发送消息时的行为是否符合预期。在这种情况下,可能会在其中放置一个模拟sendChannel并验证是否在其上发送了正确的值。

于 2017-10-31T17:19:31.487 回答