我们如何测试Java中的Actor?

我们如何测试Java中的Actor?

问题描述:

到目前为止,我见过的唯一一件事就是发布一个测试TypedActor的例子。我认为没有办法通过说Junit来测试UntypedActor?阿卡文档日益好转,但我没有看到提及的测试。这真的很明显,我只是错过了一些东西?我们如何测试Java中的Actor?

+1

纠正我,如果我错了,但你不需要直接测试演员,如果它只是调用另一个类实现逻辑的方法: MyActor extends UntypedACtor {newCount(Object o){new MyBusinessRule ()。做();所以,通过测试Actor,你将测试AKKA而不是你的逻辑。 – Eldelshell 2012-09-26 09:24:05

对于使用JUnit测试,你将需要使用的测试演员JUnit提供的设施外,文档(Java的当量是UntypedActor)是在这里:http://akka.io/docs/akka/snapshot/scala/testing.html

+0

它适用于Java吗?我试过了,但我似乎无法弄清楚如何使用Java。 – chaostheory 2011-05-12 19:18:42

+0

不,它不适用于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。让我知道,如果这对你有用。