当我编写涉及在Eventstream上订阅事件或观看演员并列出" Terminated"的测试时,测试可以正常运行它们1 1但是当我运行整个测试套件时,这些测试失败。 如果每个测试都在与Xunit的单独测试类中,测试也会起作用。
为什么?
答案 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
实现。