使用 testkit 进行 akka Actor 单元测试
akka Actor unit testing using testkit
当被测试的 Actor 正在响应询问时有 many examples of using akka-testkit 次:
//below code was copied from example link
val actorRef = TestActorRef(new MyActor)
// hypothetical message stimulating a '42' answer
val future = actorRef ? Say42
val Success(result: Int) = future.value.get
result must be(42)
但是我有一个不响应发件人的 Actor;它而是将消息发送给单独的参与者。一个简化的例子是:
class PassThroughActor(sink : ActorRef) {
def receive : Receive = {
case _ => sink ! 42
}
}
TestKit 有一套 expectMsg
方法,但我找不到任何创建可以在单元测试中接收消息的测试接收器 Actor 的示例。
可以测试我的PassThroughActor
吗?
提前感谢您的考虑和回复。
如评论中所述,您可以使用 TestProbe 来解决此问题:
val sink = TestProbe()
val actorRef = TestActorRef(Props(new PassThroughActor(sink.ref)))
actorRef ! "message"
sink.expectMsg(42)
当被测试的 Actor 正在响应询问时有 many examples of using akka-testkit 次:
//below code was copied from example link
val actorRef = TestActorRef(new MyActor)
// hypothetical message stimulating a '42' answer
val future = actorRef ? Say42
val Success(result: Int) = future.value.get
result must be(42)
但是我有一个不响应发件人的 Actor;它而是将消息发送给单独的参与者。一个简化的例子是:
class PassThroughActor(sink : ActorRef) {
def receive : Receive = {
case _ => sink ! 42
}
}
TestKit 有一套 expectMsg
方法,但我找不到任何创建可以在单元测试中接收消息的测试接收器 Actor 的示例。
可以测试我的PassThroughActor
吗?
提前感谢您的考虑和回复。
如评论中所述,您可以使用 TestProbe 来解决此问题:
val sink = TestProbe()
val actorRef = TestActorRef(Props(new PassThroughActor(sink.ref)))
actorRef ! "message"
sink.expectMsg(42)