我们如何在Java中测试参与者?

我们如何在Java中测试参与者?,java,testing,concurrency,actor,akka,Java,Testing,Concurrency,Actor,Akka,到目前为止,我唯一看到的是有人发布了一个测试TypedActor的示例。我想没有办法通过Junit测试一个非类型转换器?Akka文档一天比一天好,但我没有看到提到测试。这真的很明显,我只是遗漏了一些东西吗?对于使用JUnit进行测试,您需要使用JUnit提供的工具,关于testing Actor(Java equiv是UntypedActor)的文档如下:这是可能的,至少在版本1.3和2.0以及akka testkit库中是可能的 您可以执行以下操作来设置演员: @Before public v

到目前为止,我唯一看到的是有人发布了一个测试TypedActor的示例。我想没有办法通过Junit测试一个非类型转换器?Akka文档一天比一天好,但我没有看到提到测试。这真的很明显,我只是遗漏了一些东西吗?

对于使用JUnit进行测试,您需要使用JUnit提供的工具,关于testing Actor(Java equiv是UntypedActor)的文档如下:

这是可能的,至少在版本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,它略有不同):

在我写的一篇关于我的一些经历的博文中,有更多内容:
您可能对我写的一篇博文感兴趣:我使用的示例基于JUnit、Mockito和FEST Reflect。让我知道这是否对您有用。

它是否适用于Java?我试过了,但我似乎不知道如何使用Java。不,它不适用于Java。如果需要使用JUnit,则需要使用JUnit API。如果我错了,请纠正我的错误,但如果Actor所做的只是调用另一个实现逻辑的类上的方法,则不需要直接测试它:MyActor扩展了UntypedACtor{onCall(Object o){new MyBusinessRule().do();}}所以,通过测试演员,你将测试阿克卡,而不是你的逻辑。
@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);
}