Akka 如何测试一个演员不是在阿克卡终止的

Akka 如何测试一个演员不是在阿克卡终止的,akka,Akka,我正在尝试测试参与者是否被终止,我知道有一种方法可以使用TestProbe的expectTerminated 但是有没有一种方法可以测试相反的情况呢 谢谢:) 更新 在我的场景中,我有一个用户actor,它有一个或多个子actor,当其所有子actor断开连接(终止)时,它将自行终止 该行为运行良好,但我的问题是,我只能测试一个场景,该场景没有子对象,并且会自行终止。我找不到正确的断言来检查它是否没有终止,如果它还剩下孩子的话 下面是一个简化的测试版本: "Terminates itself

我正在尝试测试参与者是否被终止,我知道有一种方法可以使用TestProbe的
expectTerminated

但是有没有一种方法可以测试相反的情况呢

谢谢:)

更新 在我的场景中,我有一个用户actor,它有一个或多个子actor,当其所有子actor断开连接(终止)时,它将自行终止

该行为运行良好,但我的问题是,我只能测试一个场景,该场景没有子对象,并且会自行终止。我找不到正确的断言来检查它是否没有终止,如果它还剩下孩子的话

下面是一个简化的测试版本:

"Terminates itself if there are no connected clients" in {
  val userActor = system.ActorOf(UserActor.props())

  userActor ! UserActor.ClientDisconnected()

  val deathWatch = TestProbe()
  deathWatch.watch(userActor)
  deathWatch.expectTerminated(userActor, timeoutDuration)
}

"Not Terminates itself when there are still other clients connected" in {
  val userActor = system.ActorOf(UserActor.props())

  // Connecting a client
  userActor ! UserActor.ClientConnected(sessionId, accessToken)

  userActor ! UserActor.ClientDisconnected()

  // How can I test that userActor is not terminated?
}

从testkit中汲取灵感,您可以做以下事情:

  import scala.concurrent.duration._
  import akka.testkit._

  def expectNoTerminated(target: ActorRef, max: FiniteDuration) {
    val o = receiveOne(max.dilated)

    if (o ne null)
      assert(o != Terminated(target), s"received Terminated message $o")
  }

这只会检查,如果您收到一条消息,它不会被终止,因此它可能不会覆盖所有场景。

看起来很有希望,但我无法让它工作
receiveOne
始终返回null。我将尝试不同的方法,看看是否有效。我还更新了我的问题,如果有帮助的话,谢谢!如果返回null,则表示在提供的
max
持续时间内未收到
终止的
消息。因此-我假设-您的测试已经通过。问题是无论参与者是否终止,
receiveOne
总是返回null。但我觉得这是正确的方向,稍后我会做更多的测试。