我们如何测试Java中的Actor?
到目前为止,我见过的唯一一件事就是发布一个测试TypedActor的例子。我认为没有办法通过说Junit来测试UntypedActor?阿卡文档日益好转,但我没有看到提及的测试。这真的很明显,我只是错过了一些东西?我们如何测试Java中的Actor?
对于使用JUnit测试,你将需要使用的测试演员JUnit提供的设施外,文档(Java的当量是UntypedActor)是在这里:http://akka.io/docs/akka/snapshot/scala/testing.html
它适用于Java吗?我试过了,但我似乎无法弄清楚如何使用Java。 – chaostheory 2011-05-12 19:18:42
不,它不适用于Java。如果你需要使用JUnit,那么你需要使用JUnit API。 – 2011-05-13 11:53:47
这是可能的,至少有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
您可能会感兴趣在我写的博文:Testing AKKA actors with Mockito and FEST-Reflect我使用的示例基于JUnit,Mockito和FEST-Reflect。让我知道,如果这对你有用。
纠正我,如果我错了,但你不需要直接测试演员,如果它只是调用另一个类实现逻辑的方法: MyActor extends UntypedACtor {newCount(Object o){new MyBusinessRule ()。做();所以,通过测试Actor,你将测试AKKA而不是你的逻辑。 – Eldelshell 2012-09-26 09:24:05