当前位置: 首页 > 知识库问答 >
问题:

如何测试在运行时产生子角色的Akka actor?

寿亦
2023-03-14

在我的另一个问题之后,我有一个UDP服务器参与者,如下所示:

class Listener(addr: InetSocketAddress) extends Actor {
  import context.system
  IO(Udp) ! Udp.Bind(self, addr)

  def spawnChild(remote): ActorRef = {
    //Check if child already exist
    context.actorOf(Props[Worker])
  }

  def receive = {
    case Udp.Bound(local) =>
      context.become(ready(sender()))
  }

  def ready(socket: ActorRef): Receive = {
    case Udp.Received(data, remote) =>
      val worker = spawnChild(remote)
      worker ! data // forward data directly to child
    case Udp.Unbind  => socket ! Udp.Unbind
    case Udp.Unbound => context.stop(self)
  }
}

我正在根据数据从何处发送来创建子角色。这样做的原因是子参与者保持一些内部状态。内部状态包括上次连接时间、发送的数据包总数等

我想设置TestProbe来测试它

  • 来自remoteA的数据被转发到TestProbeA
  • 来自remoteB的数据被转发到TestProbeB
  • 来自remoteA的数据不会转发到TestProbeB

我已经阅读了使用多个探针的部分。然而,在我的情况下,是父母演员负责创造孩子。

在这种情况下,我应该如何编写规范?或者,我应该如何重构代码以使其更易于测试?

共有1个答案

阎裕
2023-03-14

akka文档中有一节概述了可以实现的几种方法:测试父子关系

在工作中,我们已经成功地使用了从父级外部化子级制作中解释的方法。在实践中,这意味着您的父参与者在初始化时(或通过消息)接受“子工厂”参数

在测试代码中,您可以提供一个“假”工厂,它将返回一个测试探针,而不是一个纯粹的参与者。

 类似资料:
  • 问题内容: 我开始采用TDD开发态度,并为django应用程序编写单元测试。我知道固定装置,并且知道应该执行测试的方式,但是对于给定的测试,我确实需要在整个数据库上执行它,而我想处理的10百万以上行数据库的json固定装置,此外,此测试是“只读”的。 因此,问题是如何设置测试套件以在生产数据库上运行?我想这就像在某些测试的setUp方法中添加DATABASE_NAME设置一样容易。但是运行测试时,

  • 我有以下配置,但得到错误 詹金斯命令 下面是我的配置文件

  • 是否有可能在运行时检测React的当前版本是开发还是生产?我想做这样的事情:

  • 我想在虚拟机上运行量角器测试。我已经尝试使用以下命令运行它: 不幸的是,这种方法非常缓慢。还有其他方法在虚拟机上运行量角器测试吗?也许是使用selenium的远程webdriver(我不知道如何进行设置)。

  • 问题内容: 我似乎无法通过测试成功获得PhantomJS。我试图将其集成到我的项目中,但是在此之后失败了,我尝试仅运行基本的Angular Docs示例,但遇到了同样的问题。到目前为止,我的步骤: // … GhostDriver-Main-在端口9515上运行 这是与示例中相同的文件,仅具有browserName,并且seleniumAddress端口已更改: 我收到以下错误消息: 我在gith

  • 在其他一些测试框架中,我习惯于标记测试,例如@really_slow,@front_end