Akka单身演员不接收消息

时间:2016-02-11 12:23:37

标签: java unit-testing akka actor

我试图在这里介绍尽可能简单的变化问题.. 我写了一个单元测试,作为代码的副作用,创建了一个单独的actor。在他的preStart方法中,他通过调用 startJobCoordinator 方法创建其他单例actor。

private boolean startJobCoordinator(JobConfiguration jobConfiguration) throws InterruptedException  {
    ActorRef jobRef = createSingletonActor(Props.create(JobCoordinator.class, jobConfiguration.getId()), jobConfiguration.getId());
    jobRef.tell("DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", self());
    TimeUnit.SECONDS.sleep(1);
    return true;
}

private ActorRef createSingletonActor(Props props, final String name) {
    final ClusterSingletonManagerSettings settings = ClusterSingletonManagerSettings.create(getContext().system());
    getContext().actorOf(ClusterSingletonManager.props(props, PoisonPill.getInstance(), settings), name);

    ClusterSingletonProxySettings proxySettings = ClusterSingletonProxySettings.create(getContext().system());
    return getContext().actorOf(ClusterSingletonProxy.props("/user" + name, proxySettings), name + "Proxy");
}

现在,在类型为AbstractActor的JobCoordinator单例actor中,我编写了一个 receive 方法,如下所示:

match(String.class, System.err::println).build();

在单元测试中,未收到“ DDDDDDDDDDDDDDDDDDDDD ”消息(并且未打印)。

当作为运行整个系统的一部分运行相同的代码时,JobCoordinator actor获取消息。 当我将JobCoordinator创建为常规actor而不是单身时,他会得到消息(即使是单元测试的一部分)。

我真的很无能......任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

问题是我在测试中使用JMock来模拟JobCoordinator(由不同的测试使用,但注释也影响了这个测试)。