[英]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.