【问题标题】:How do we test Actors in Java?我们如何在 Java 中测试 Actor?
【发布时间】:2011-05-11 21:55:33
【问题描述】:

到目前为止,我唯一看到的是有人发布了一个测试 TypedActor 的示例。我认为没有办法通过说 Junit 来测试 UntypedActor? Akka 文档一天比一天好,但我没有看到提到的测试。这真的很明显,我只是错过了一些东西吗?

【问题讨论】:

  • 如果我错了,请纠正我,但如果 Actor 所做的只是调用另一个实现逻辑的类上的方法,则不需要直接测试 Actor: MyActor extends UntypedACtor{ onCall(Object o ){ new MyBusinessRule().do();因此,通过测试 Actor,您将测试 AKKA 而不是您的逻辑。

标签: java testing concurrency actor akka


【解决方案1】:

要使用 JUnit 进行测试,您需要使用 JUnit 提供的工具,有关测试 Actor(Java equiv 是 UntypedActor)的文档在这里:http://akka.io/docs/akka/snapshot/scala/testing.html

【讨论】:

  • 它是否适用于 Java?我试过了,但我似乎无法弄清楚如何与 Java 一起使用。
  • 不,它不适用于 Java。如果您需要使用 JUnit,则需要使用 JUnit API。
【解决方案2】:

至少在 1.3 和 2.0 版本以及 akka-testkit 库中是可能的。

你做这样的事情来设置你的演员:

@Before
public void initActor() {
    actorSystem = ActorSystem.apply();
    actorRef = TestActorRef.apply(new AbstractFunction0() {

        @Override
        public Pi.Worker apply() {
            return new Pi.Worker();
        }

    }, actorSystem);
}

然后您可以使用 TestProbe 类来测试您的演员(对于 1.3 版,它略有不同):

@Test
public void calculatePiFor0() {
    TestProbe testProbe = TestProbe.apply(actorSystem);
    Pi.Work work = new Pi.Work(0, 0);        
    actorRef.tell(work, testProbe.ref());

    testProbe.expectMsgClass(Pi.Result.class);     
    TestActor.Message message = testProbe.lastMessage();
    Pi.Result resultMsg = (Pi.Result) message.msg();
    assertEquals(0.0, resultMsg.getValue(), 0.0000000001);
}

在我写的关于我的一些经验的博文中有更多可用的内容: http://fhopf.blogspot.com/2012/03/testing-akka-actors-from-java.html

【讨论】:

    【解决方案3】:

    您可能对我写的博客文章感兴趣:Testing AKKA actors with Mockito and FEST-Reflect 我使用的示例基于 JUnit、Mockito 和 FEST-Reflect。让我知道这对您是否有用。

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 2012-03-15
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 2017-08-04
      • 2015-05-07
      相关资源
      最近更新 更多