【发布时间】:2017-03-23 12:25:07
【问题描述】:
我是演员新手,我正在学习如何使用TestActorRef 测试演员
我的演员代码:
package actors
import actors.GreetingActor.Hi
import akka.actor.Actor
object GreetingActor {
case class Hi()
}
class GreetingActor extends Actor {
var greeting = ""
override def receive: Receive = {
case Hi() =>
greeting = "Hi"
case _ =>
throw new IllegalArgumentException("not supported message")
}
override def postRestart(reason: Throwable) = {
println(s"actor is restarted because of ${reason.getMessage}")
}
}
我确信这段代码中的一切都按我的意愿工作,但我无法在测试中显示它。尤其是我无法展示最重要的事情之一,我的演员坠毁了。测试非常简单且明显,我发送的消息不是Hi(),并且应该以某种方式跟踪那个演员与IllegalArgumentException 一起崩溃。我当前的测试代码:
package actors
import actors.GreetingActor.Hi
import akka.actor.ActorSystem
import akka.testkit.{TestActorRef, TestKit}
import org.scalatest.{MustMatchers, WordSpecLike}
class GreetingActorTest extends TestKit(ActorSystem("testsystem")) with WordSpecLike
with MustMatchers with StopSystemAfterAll {
"A Hello Actor" must {
"change state when it receives a message, single threaded" in {
val greetingActor = TestActorRef[GreetingActor]
greetingActor ! Hi()
greetingActor.underlyingActor.greeting mustBe "Hi"
}
"throw exception when it received unknown message, single threaded" in {
val greetingActor = TestActorRef[GreetingActor]
greetingActor ! "hi"
//some code that checks that actor crashed
}
}
}
问题是如何在测试中跟踪我的演员使用TestActorRef 崩溃的情况?感谢任何帮助。
【问题讨论】: