взглянул на вашем хранилище. Я могу воспроизвести проблемы, которые вы описываете.
Это похоже на ошибку в TestKit, где-то в некоторых случаях. Но его трудно поддаться. Кроме того, не все модульные тестовые среды создаются одинаково. Тест-кит использует собственный TaskDispatcher, чтобы обеспечить тестирование того, что обычно является асинхронно обработанными операциями. Это иногда вызывает некоторые конфликты с используемой тестовой программой. Также случайно, что akka.net также перешел на XUnit для собственного процесса CI.
Мне удалось исправить вашу проблему, не используя TestProbe. Хотя я не уверен, что проблема связана с TestProbe за отзыв, или тот факт, что вы используете глобальную ссылку (ваша переменная «process»). Я подозреваю, что тестовая сценария при выполнении тестов в parrallel может привести к возникновению каких-то странных вещей с вашей ссылкой на 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
реализация.
Я тестировал это с помощью NUnit, и если я буду запускать все тесты вместе, то «GivenProcessExist_WhenProcessterminates_ShouldLogRemovingProcess» надежно отказывается каждый раз. Он всегда работает, если я запускаю только один тест. Но все тесты вместе работают нормально, если я их переупорядочу, выполняя «GivenProcessExist_WhenProcessterminates_ShouldLogRemovingProcess» как первый. – Haukinger