2011-05-11 2 views
6

La seule chose que j'ai vue jusqu'ici est quelqu'un qui publie un exemple de test d'un TypedActor. Je suppose qu'il n'y a aucun moyen de tester un UntypedActor par le biais de Junit? Les docs Akka s'améliorent de jour en jour, mais je ne vois pas les tests mentionnés. Est-ce vraiment évident et je manque juste quelque chose?Comment testons-nous Actors en Java?

+1

Corrigez-moi si je me trompe mais vous n'avez pas besoin de tester directement un acteur si tout ce qu'il fait est d'appeler une méthode sur une autre classe qui implémente la logique: MyActor extends UntypedACtor {onCall (Object o) {new MyBusinessRule().faire(); }} Donc, en testant l'acteur vous testeriez AKKA et non votre logique. – Eldelshell

Répondre

5

Pour les tests avec JUnit, vous aurez besoin d'utiliser les installations fournies par JUnit, la documentation sur les tests Acteur (Java equiv est UntypedActor) est ici: http://akka.io/docs/akka/snapshot/scala/testing.html

+0

Est-ce que cela fonctionne avec Java? J'ai essayé, mais je n'arrive pas à comprendre comment utiliser Java. – chaostheory

+0

Non, cela ne fonctionne pas avec Java. Si vous devez utiliser JUnit, vous devez utiliser l'API JUnit. –

1

Il est possible, au moins avec la version 1.3 et 2.0 et la bibliothèque akka-testkit.

Vous faites quelque chose comme ceci pour configurer votre acteur:

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

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

    }, actorSystem); 
} 

Vous pouvez alors utiliser la classe TESTPOINTE DE TOUCHE pour tester votre acteur (pour la version 1.3, il est légèrement différente):

@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); 
} 

Il est plus disponible dans un blogue que j'ai écrit sur certaines de mes expériences: http://fhopf.blogspot.com/2012/03/testing-akka-actors-from-java.html

Questions connexes