java - 使用 Akka(使用 Java)如何验证我的被测 Actor 正在观看另一个 Actor ?

标签 java unit-testing akka

我有以下 Actor ,我想为其创建单元测试以验证以下行为:

  1. ListeningActor 正确注册自己以观看 listeningTo actor。
  2. listeningTo actor 终止时,
  3. ListeningActor 正确地杀死了自己。

如何验证这两种行为?

我在 Java 中使用 Akka 2.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);
        }
    }
}

最佳答案

如果对任何人有帮助,这是我的最终单元测试:

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

关于java - 使用 Akka(使用 Java)如何验证我的被测 Actor 正在观看另一个 Actor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11083025/

相关文章:

java - 如何查找操作系统位类型

java - 足球数据 API JSON 解析错误

unit-testing - 参数化 jUnit 测试,无需更改运行程序

http - 如何在 Spray 框架中获取传入 IP 地址

java - Akka:创建许多 child Actor 与重用单个 child Actor

java - 在特定时间后停止调度程序

java - 获取和设置首选项值

unit-testing - Gradle提示TestNG任务上的JUnit版本

android - InstrumentationTestCase 和 AndroidTestCase 的区别

java - 是否可以动态运行 Drools 规则?