Jedyne, co widziałem do tej pory, to ktoś, kto publikuje przykład testowania TypedActor. Rozumiem, że nie ma sposobu na przetestowanie UntypedActor przez powiedzmy Junit? Dokumenty Akka z dnia na dzień poprawiają się, ale nie widzę wspomnianych testów. Czy to naprawdę oczywiste i po prostu coś mi brakuje?Jak testujemy aktorów w Javie?
Odpowiedz
Do testowania z JUnit musisz korzystać z usług świadczonych przez JUnit, docs na testowaniu aktora (równoważnik Java jest UntypedActor) jest tutaj: http://akka.io/docs/akka/snapshot/scala/testing.html
Czy to działa z Javą? Próbowałem, ale nie potrafię wymyślić, jak używać z Javą. – chaostheory
Nie, to nie działa z Javą. Jeśli potrzebujesz użyć JUnit, musisz użyć interfejsu API JUnit. –
Jest możliwe, przynajmniej w wersji 1.3 i 2.0 oraz bibliotekę akka-testkit.
zrobić coś takiego, aby skonfigurować swój Aktor:
@Before
public void initActor() {
actorSystem = ActorSystem.apply();
actorRef = TestActorRef.apply(new AbstractFunction0() {
@Override
public Pi.Worker apply() {
return new Pi.Worker();
}
}, actorSystem);
}
Następnie można użyć klasy TestProbe przetestować aktora (dla wersji 1.3 jest nieco inna):
@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);
}
Nie jest bardziej dostępny na blogu, który napisałem o moich doświadczeniach: http://fhopf.blogspot.com/2012/03/testing-akka-actors-from-java.html
Być może zainteresuje Cię post na blogu, który napisałem: Testing AKKA actors with Mockito and FEST-Reflect Przykład, którego używam, bazuje na JUnit, Mockito i FEST-Reflect. Daj mi znać, jeśli to Ci się przyda.
Popraw mnie, jeśli się mylę, ale nie musisz testować aktora bezpośrednio, jeśli wszystko, co robi, to wywołanie metody na innej klasie, która implementuje logikę: MyActor rozszerza UntypedACtor {onCall (Object o) {new MyBusinessRule().zrobić(); }} Więc, testując Aktora, testujesz AKKA, a nie logikę. – Eldelshell