在Akka Testkit中,为什么要使用事件而不是常规方法来获取参与者状态?

罗兰·陈(LoranceChen)

阿卡书中演员的第三章中。它使用消息事件来测试静默演员的状态。

演员是这样的:

object SilentActorProtocol {
 case class SilentMessage(data: String)
 case class GetState(receiver: ActorRef)
}
class SilentActor extends Actor {
 import SilentActorProtocol._
 var internalState = Vector[String]()
 def receive = {
   case SilentMessage(data) =>
     internalState = internalState :+ data
     case GetState(receiver) => receiver ! internalState
   }
}

测试代码如下:

"change internal state when it receives a message, multi" in {
 import SilentActorProtocol._
 val silentActor = system.actorOf(Props[SilentActor], "s3")
 silentActor ! SilentMessage("whisper1")
 silentActor ! SilentMessage("whisper2")
 silentActor ! GetState(testActor)
 expectMsg(Vector("whisper1", "whisper2"))
}

内部测试代码为何使用GetState获取上述SilentMessage事件的结果
为什么不直接使用slientActor.internalState得到结果呢?

更新

有些朋友似乎误导了我的问题。

使用该internalState变量会遇到并发问题,因此应该使用GetState事件告诉actor来获取actor的内部状态,而不是internalState直接使用

我不知道为什么它应该遇到并发问题,为什么使用GetState可以解决问题

解释

slientActor.internalState不能直接获取内部变量,不能理解,使用silentActor.underlyingActor.internalState就可以得到它。所以对这个可怕的问题感到抱歉。

礼萨

如果我正确理解了您的问题,答案是测试代码中的silentActor不是actor,而是ActorRef实例,因此它没有要引用的internalState变量。

如果要在ActorRef上针对特定变量和方法编写单元测试,则需要使用文档中所描述的底层Actor技术(及其注意事项)(请参见有关TestActorRef的部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Akka是否根据可用资源来规范参与者?

来自分类Dev

Akka.NET查询参与者有效

来自分类Dev

具有参与者的Akka群集节点离开

来自分类Dev

Akka:在参与者系统之外进行交流?

来自分类Dev

Akka消息和参与者的命名约定

来自分类Dev

Akka持久性查询和参与者分片

来自分类Dev

Akka启动和访问参与者返回的数据

来自分类Dev

Akka参与者之间的工作负载平衡

来自分类Dev

具有持久参与者的 Akka Sharding 的背压

来自分类Dev

Akka / Scala承诺需要两个参与者来完成

来自分类Dev

Akka:参与者之间沟通和处理特殊状态(无错误)

来自分类Dev

Akka持久性参与者的用例是什么?

来自分类Dev

使用Kotlin和Akka-TestKit测试Akka演员

来自分类Dev

使用Kotlin和Akka-TestKit测试Akka演员

来自分类Dev

在Akka中对持久性参与者进行单元测试

来自分类Dev

Akka:获取演员总数

来自分类Dev

Akka:获取演员总数

来自分类Dev

询问模式是否可与Akka IO参与者一起使用?

来自分类Dev

询问模式是否可与Akka IO参与者一起使用?

来自分类Dev

在Akka中热部署

来自分类Dev

Playframework中的Akka版本

来自分类Dev

Akka 2.3.4中的原子

来自分类Dev

在Akka HTTP中编组

来自分类Dev

Java 中的 Akka FSM

来自分类Dev

何时使用Akka Microkernel?

来自分类Dev

在Akka中使用logback

来自分类Dev

如何在部署在不同群集节点上的两个相同参与者之间保持状态?(akka.net)

来自分类Dev

在Akka TestKit中创建TestProbe的时间

来自分类Dev

在 akka testkit 中修改询问超时