#java #testing #concurrency #actor #akka
#java #тестирование #параллелизм #актер #akka
Вопрос:
Единственное, что я видел до сих пор, это то, что кто-то опубликовал пример тестирования TypedActor. Я так понимаю, нет способа протестировать нетипизированный объект, скажем, через Junit? Документы Akka становятся лучше с каждым днем, но я не вижу упоминания о тестировании. Это действительно очевидно, и я просто чего-то не понимаю?
Комментарии:
1. Поправьте меня, если я ошибаюсь, но вам не нужно было бы тестировать актера напрямую, если все, что он делает, это вызывает метод в другом классе, который реализует логику: MyActor расширяет UntypedActor{ OnCall(Object o){ new MyBusinessRule().do(); } } Итак, тестируя актера, вы бы тестировали AKKA, а не свою логику.
Ответ №1:
Для тестирования с помощью JUnit вам нужно будет использовать средства, предоставляемые JUnit, документы по тестированию актера (Java equiv — это нетипизированный актер) находятся здесь: http://akka.io/docs/akka/snapshot/scala/testing.html
Комментарии:
1. Работает ли это с Java? Я пытался, но, похоже, не могу понять, как использовать с Java.
2. Нет, это не работает с Java. Если вам нужно использовать JUnit, то вам нужно будет использовать JUnit API.
Ответ №2:
Это возможно, по крайней мере, с версиями 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
Ответ №3:
Возможно, вас заинтересует сообщение в блоге, которое я написал: Тестирование актеров AKKA с помощью Mockito и FEST-Reflect Пример, который я использую, основан на JUnit, Mockito и FEST-Reflect. Дайте мне знать, если это будет вам полезно.