[英]Using Akka (with Java) how can I verify that my actor under test is watching another actor?
我有以下actor,我想创建单元测试来验证以下行为:
ListeningActor
正确注册自己以观看listeningTo
actor。 listeningTo
actor终止时, ListeningActor
正确杀死自己。 我该如何验证这两种行为?
我正在使用Akka 2.0.2和Java。
谢谢
public class ListeningActor extends UntypedActor {
private final ActorRef listeningTo;
public ListeningActor(final ActorRef listeningTo) {
this.listeningTo = listeningTo;
}
@Override
public void preStart() {
super.preStart();
context().watch(listeningTo); // <---- To verify
}
@Override
public void onReceive(final Object o) throws Exception {
if (o instanceof Terminated) {
Terminated terminated = (Terminated) o;
if (terminated.equals(listeningTo)) {
context().stop(self()); // <---- To verify
}
} else {
unhandled(o);
}
}
}
如果它对任何人有帮助,这是我最后的单元测试:
public class ListeningActorTest
{
private TestKit testKit;
private TestActorRef<ListeningActor> listeningActor;
private TestProbe listeningToActor;
@Before
public void setUp() throws Exception
{
testKit = new TestKit(ActorSystem.apply());
listeningToActor = TestProbe.apply(testKit.system());
listeningActor = TestActorRef.apply(new Props(new UntypedActorFactory()
{
@Override
public Actor create()
{
return new ListeningActor(listeningToActor.ref());
}
}), testKit.system());
}
@Test
public void shouldTerminateWhenTheListeningToActorTerminates()
{
//Given
assertFalse(listeningActor.isTerminated());
//When
listeningToActor.testActor().tell(PoisonPill.getInstance());
//Then
assertTrue(listeningActor.isTerminated());
}
}
如果您使用的是JavaTestKit和akka版本2.4.2,您可以像这样解决它:
@Test
public void testThatPersistenceActorShutdown() {
watch(persistenceActor);
persistenceActor.tell(new Shutdown(), getRef());
expectTerminated(persistenceActor);
}
你可以在这里找到一个有用的例子 - akka-persistence-java-example
使用TestKit中的testActor观察ListenerActor,然后在PoisonPill和/或停止它侦听的actor时期望ListenerActor被终止。 完成。
免责声明:我不熟悉akka。
你可以继承ActorRef吗? 如果是这样,您可以专门为测试创建一个子类,以便发送消息并终止。 然后,在单元测试中,告诉您的ListeningActor实例终止,并验证您的ListeningActor实例是否已停止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.