unit-testing - 测试传出 Akka Actor 消息

标签 unit-testing scala akka actor

假设我有一个这样的 Actor (使用 Akka 2.1 和 Scala 2.10):

class ClientActor extends Actor with ActorLogging {

  val configurationManager = context.actorOf(Props[ConfigurationManager], "ConfigurationManager")

  def disconnected: Receive = {
    case msg: Connect => 
      configurationManager ! msg
      context.become(connecting)
  }

  ..

  def recieve = disconnected
}

所以现在当客户端收到一个 Connect 消息时,它会将它发送到 ConfigurationManager 并进入不同的状态。没关系,但现在我想测试一下。
val clientRef = TestActorRef(new ClientActor).
clientRef ! new Connect
// ??

我不能期望Msg() 左右,因为它将被发送给不同的 Actor 。处理这种情况的最佳做法是什么?我只是想确保消息被发送,但我不知道如何做到这一点。

谢谢,
迈克尔

最佳答案

将依赖项作为构造函数参数传入:

普通代码:

val configActor = 
  system.actorOf(Props[ConfigurationManager], "configManager")

val clientActor = 
  system.actorOf(Props(new ClientActor(configActor)), "clientActor")

测试代码:
val clientActor = 
  system.actorOf(Props(new ClientActor(testActor)), "clientActor")

关于unit-testing - 测试传出 Akka Actor 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341449/

相关文章:

scala - 如何在 Spark 中对 RDD 进行排序和限制?

scala - Scala 有 0 元组和 1 元组的语法吗?

java - 如何在 Java 中初始化 FSM actor?

playframework - 如何使用 Akka 配置 play 应用程序在集群中运行

unit-testing - Rust 书籍单元测试示例导致死代码警告 - 为什么?

unit-testing - 使用 HttpRequestMessage 对 Azure Functions 进行单元测试

java - 如何让 Spark Streaming 在单元测试中计算文件中的单词数?

unit-testing - Apache Hive 中的自动化测试

java - 在 Scala 中将泛型类型转换为 AnyRef

scala - Actor 消息处理程序中捕获了哪个发送者?