观看演员终止时的测试行为不一致

时间:2016-11-23 15:07:28

标签: tdd akka.net akka-testkit

当我编写涉及在Eventstream上订阅事件或观看演员并列出" Terminated"的测试时,测试可以正常运行它们1 1但是当我运行整个测试套件时,这些测试失败。 如果每个测试都在与Xunit的单独测试类中,测试也会起作用。

为什么?

有这些测试的回购:https://github.com/Lejdholt/AkkaTestError

1 个答案:

答案 0 :(得分:1)

查看您的存储库。我可以重现你描述的问题。

感觉就像TestKit中的一个错误,某些时间问题。但它很难确定。 此外,并非所有单元测试框架都是同等创建的。 testkit使用自己的TaskDispatcher来测试通常固有的异步处理操作。 这有时会导致与正在使用的testframework发生冲突。也恰巧是为什么akka.net也为了自己的CI流程而转移到XUnit。

我已经设法通过不使用TestProbe解决您的问题。虽然我不确定问题在于每个人说的TestProbe,或者你在哪里使用全局引用(你的'进程'变量)。 我怀疑testframework在并行运行测试时可能会导致你的testprobe引用发生一些奇怪的事情。

我如何改变你的一个测试的例子:

     [Test]
    public void GivenAnyTime_WhenProcessTerminates_ShouldLogStartRemovingProcess()
    {
        IProcessFactory factory = Substitute.For<IProcessFactory>();
        var testactor = Sys.ActorOf<FakeActor>("test2");
        processId = Guid.NewGuid();
        factory.Create(Arg.Any<IActorRefFactory>(), Arg.Any<SupervisorStrategy>()).Returns(testactor);
        manager = Sys.ActorOf(Props.Create(() => new Manager(factory)));

        manager.Tell(new StartProcessCommand(processId));

        EventFilter.Info("Removing process.")
            .ExpectOne(() => Sys.Stop(testactor));
    }

关于如何更改其他测试应该是相当自我解释的。 FakeActor只不过是一个空的ReceiveActor实现。