4

次の動作を検証するための単体テストを作成したい次のアクターがいます。

  1. ListeningActorlisteningToアクターを監視するために自分自身を正しく登録します。
  2. ListeningActorlisteningToアクターが終了すると、正しく自殺します。

これらの2つの動作を確認するにはどうすればよいですか?

JavaでAkka2.0.2を使用しています。

ありがとう

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

4 に答える 4

5

それが誰かを助けるなら、これが私の最後のユニットテストです:

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());
    }
}
于 2012-06-19T08:33:35.993 に答える
3

JavaTestKitとakkaバージョン2.4.2を使用している場合は、次のように解決できます。

@Test
public void testThatPersistenceActorShutdown() {
    watch(persistenceActor);
    persistenceActor.tell(new Shutdown(), getRef());
    expectTerminated(persistenceActor);
}

ここで実用的な例を見つけることができます-akka-persistence-java-example

于 2016-03-07T20:41:35.003 に答える
2

TestKitのtestActorでListenerActorを監視し、PoisonPillを実行したときにListenerActorが終了することを期待します。または、リッスンしているアクターを停止します。終わり。

于 2012-06-18T15:59:38.650 に答える
0

免責事項:私はakkaに精通していません。

ActorRefをサブクラス化できますか?その場合、メッセージを送信して終了させることができるテスト専用のサブクラスを作成できます。次に、単体テストで、ListeningActorのインスタンスを終了するように指示し、ListeningActorインスタンスが停止していることを確認します。

于 2012-06-18T13:53:09.660 に答える