Akka Actor isTerminated 已弃用
Akka Actor isTerminated deprecated
只是编写单元测试以确保 actor 在特定条件下关闭,所以我有这样的测试:
val tddTestActor = TestActorRef[MyActor](Props(classOf[MyActor], "param1"))
tddTestActor ! someMessage
tddTestActor.isTerminated shouldBe true
我收到一条警告,指出 isTerminated 已弃用。提示建议我使用 context.watch() 但是在单元测试中我没有父角色或任何要观看的上下文。
验证 tddTestActor 关闭的最佳方法是什么?
我同意观看是完成此任务的最佳方式。当我测试停止行为时,我通常会使用 TestProbe
作为观察者来检查我的被测 actor。假设我有一个非常简单的 Actor
定义如下:
class ActorToTest extends Actor{
def receive = {
case "foo" =>
sender() ! "bar"
context stop self
}
}
然后,将 specs2 与 akka 的 TestKit
结合使用,我可以像这样测试停止行为:
class StopTest extends TestKit(ActorSystem()) with SpecificationLike with ImplicitSender{
trait scoping extends Scope {
val watcher = TestProbe()
val actor = TestActorRef[ActorToTest]
watcher.watch(actor)
}
"Sending the test actor a foo message" should{
"respond with 'bar' and then stop" in new scoping{
actor ! "foo"
expectMsg("bar")
watcher.expectTerminated(actor)
}
}
}
只是编写单元测试以确保 actor 在特定条件下关闭,所以我有这样的测试:
val tddTestActor = TestActorRef[MyActor](Props(classOf[MyActor], "param1"))
tddTestActor ! someMessage
tddTestActor.isTerminated shouldBe true
我收到一条警告,指出 isTerminated 已弃用。提示建议我使用 context.watch() 但是在单元测试中我没有父角色或任何要观看的上下文。
验证 tddTestActor 关闭的最佳方法是什么?
我同意观看是完成此任务的最佳方式。当我测试停止行为时,我通常会使用 TestProbe
作为观察者来检查我的被测 actor。假设我有一个非常简单的 Actor
定义如下:
class ActorToTest extends Actor{
def receive = {
case "foo" =>
sender() ! "bar"
context stop self
}
}
然后,将 specs2 与 akka 的 TestKit
结合使用,我可以像这样测试停止行为:
class StopTest extends TestKit(ActorSystem()) with SpecificationLike with ImplicitSender{
trait scoping extends Scope {
val watcher = TestProbe()
val actor = TestActorRef[ActorToTest]
watcher.watch(actor)
}
"Sending the test actor a foo message" should{
"respond with 'bar' and then stop" in new scoping{
actor ! "foo"
expectMsg("bar")
watcher.expectTerminated(actor)
}
}
}