测试AKKA 2.6(杀戮和毒药的替代品)

测试AKKA 2.6(杀戮和毒药的替代品),akka,akka-persistence,akka-typed,Akka,Akka Persistence,Akka Typed,我对《阿克卡经典》中的一位演员进行了测试,他正在测试持久性 逻辑很简单: 创建一个演员并发送一系列事件 根据测试,使用akka.actor.Kill或akka.actor.toxinkill停止参与者 再次启动actor并测试它是否已正确恢复 我正在将它迁移到AKKA 2.6和“AKKA类型”,但是Kill和毒杀都不可用 从文件中: 类型中不支持毒药丸。相反,如果您需要请求 要停止的参与者您应该定义一条消息,该参与者 理解并让其返回行为。收到时停止 信息 但是,使用TestKit.stop实用程

我对《阿克卡经典》中的一位演员进行了测试,他正在测试持久性

逻辑很简单:

  • 创建一个演员并发送一系列事件
  • 根据测试,使用akka.actor.Kill或akka.actor.toxinkill停止参与者
  • 再次启动actor并测试它是否已正确恢复
  • 我正在将它迁移到AKKA 2.6和“AKKA类型”,但是Kill和毒杀都不可用

    从文件中:

    类型中不支持毒药丸。相反,如果您需要请求 要停止的参与者您应该定义一条消息,该参与者 理解并让其返回行为。收到时停止 信息

    但是,使用TestKit.stop实用程序很容易复制毒药行为

    但是杀戮呢?它抛出一个将由主管管理的ActorKilledException。如何在Akka打字

    因此,问题是:如何使用“AKKA-Typed”实现此测试?

    在导入
    AKKA.actor.Typed.scaladsl.adapter.\u
    并发送信号
    AKKA.actor.Typed.internal.毒物丸时,
    ActorRef
    可以使用
    toClassic

    定义
    receiveSignal
    并记录所有信号时,避孕药执行预期的工作,您的参与者停止

    。接收信号{
    外壳(ctx,信号)=>
    调试(“{}”,信号)
    停止
    }
    

    首先
    毒药
    然后
    PostStop
    记录在我的案例中。

    Hi@sourcecodebot。谢谢你的回复。关于它的几件事:1。仅为支持测试而添加不必要的运行时代码不是一个好的做法。2.它是一个内部类,因此使用它不是一个好的实践。3.此实现优雅地停止了actor,类似于经典的毒药,但它不同于抛出ActorKilledException的Kill,后者由主管管理。一个新问题:演员是否应该返回。toClassic支持经典的杀戮和毒药丸?嗨@angelcervera,为了匹配类型化的内部信号api,我建议不要使用经典命令
    toClassic
    允许您发送行为类型信息中未定义的信号。在处理您编辑的问题时,建议定义从您的行为命令类型扩展的
    关闭
    中断
    ,并在这种情况下返回
    行为.停止