正在播放中测试对akka演员的呼叫

问题描述 投票:0回答:1

我已经重构了一个播放应用程序中的大量电子邮件发送代码,以使用actor异步执行此操作。

[当我需要发送电子邮件时,我现在注入了EmailActor,然后打电话给emailActor ? EmailRequest(from, to, ...)发送。

我的问题是,我该如何对实际被称为演员的单元进行单元测试?

[我阅读了Akka关于测试的文档,但是在我看来,它专注于测试actor本身,而不是测试他们的调用,并且也不清楚我应该从哪里开始。

scala testing playframework akka actor
1个回答
0
投票

您可以使用TestProbe并将其注入您的电子邮件服务。看看这个简单的测试用例

TestProbe

[请注意,如果您使用 import akka.actor.{ActorRef, ActorSystem} import akka.pattern.ask import akka.testkit.{TestKit, TestProbe} import akka.util.Timeout import org.scalatest.flatspec.AsyncFlatSpecLike import scala.concurrent.Future import scala.concurrent.duration._ class TestProbeActorExample extends TestKit(ActorSystem("test")) with AsyncFlatSpecLike { class MyService(actorRef: ActorRef) { def sendEmail(email: String): Future[Int] = { implicit val timeout: Timeout = 1.second (actorRef ? email).mapTo[Int] } } it should "test an actor" in { val testProbe = TestProbe() val service = new MyService(testProbe.ref) val statusCode = service.sendEmail("email") testProbe.expectMsg("email") testProbe.reply(10) statusCode.map(r => assert(r == 10)) } } 模式,则需要断言已用ask接收到消息,然后必须用expectMsg发送回信

© www.soinside.com 2019 - 2024. All rights reserved.