我们如何在Java中测试Actors?

时间:2011-05-11 21:55:33

标签: java testing concurrency actor akka

到目前为止,我唯一看到的是发布测试TypedActor示例的人。我认为通过说Junit无法测试UntypedActor? Akka文档日渐好转,但我没有看到提到的测试。它真的很明显,我只是遗漏了一些东西吗?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

至少在版本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类来测试您的actor(对于版本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

答案 2 :(得分:1)

您可能对我撰写的博文感兴趣:Testing AKKA actors with Mockito and FEST-Reflect我使用的示例基于JUnit,Mockito和FEST-Reflect。如果这对您有用,请告诉我。