NUnit 3.2.0 Console Runner System.NullReferenceException при работе с /domain= несколько

При запуске с /domain= множеством в NUnit Console Runner возникает исключение NullReference.

Запуск без /domain= несколько или с /domain= одиночные работы. Запуск с использованием ReSharper 10.0.2 с установленным параметром "Использовать отдельный домен приложений" работает так, как я хочу, и запускает тестовые сборки параллельно.

Я хочу иметь возможность запускать параметризованные тесты из нескольких сборок параллельно с помощью консоли запуска. Поскольку для этого требуется загрузка статических ресурсов параллельно, тесты должны выполняться в нескольких доменах приложений.

Я создал простое решение для модульного тестирования, чтобы воспроизвести проблему. Есть два проекта. У каждого есть один тестовый класс, который выглядит так:

[TestFixture]
public class UnitTest1
{
    public static IEnumerable Test1Static
    {
        get
        {

            Console.WriteLine($"before sleep 1 - {DateTime.Now}");
            Thread.Sleep(12000);
            Console.WriteLine($"after sleep 1 - {DateTime.Now}");
            return new List<bool> { true, true };
        }
    }

    [Test, TestCaseSource(nameof(Test1Static))]
    public void TestMethod1(bool tc)
    {
        Assert.IsTrue(tc);
    }
}

Вот результаты консоли:

nunit3-console.exe "UnitTestProject1\bin\Debug\UnitTestProject1.dll" "UnitTestProject2\bin\Debug\UnitTestProject2.dll" /domain=multiple

NUnit Console Runner 3.2.0
Copyright (C) 2016 Charlie Poole

Runtime Environment
   OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
  CLR Version: 2.0.50727.5485

Test Files
    UnitTestProject1\bin\Debug\UnitTestProject1.dll
    UnitTestProject2\bin\Debug\UnitTestProject2.dll


Test Run Summary
  Overall result: System.NullReferenceException: Object reference not set to an instance of an object.
   at NUnit.Common.ColorConsoleWriter.WriteLabel(String label, Object option, ColorStyle valueStyle)
   at NUnit.Common.ColorConsoleWriter.WriteLabelLine(String label, Object option, ColorStyle valueStyle)
   at NUnit.ConsoleRunner.ResultReporter.WriteSummaryReport()
   at NUnit.ConsoleRunner.ConsoleRunner.RunTests(TestPackage package, TestFilter filter)
   at NUnit.ConsoleRunner.Program.Main(String[] args)

1 ответ

Решение

По умолчанию NUnit 3 запускает каждую сборку в отдельном процессе (/process=Multiple флаг), поэтому /domain=multiple Флаг имеет смысл только при использовании в сочетании с /process=InProcess или с /process=Separate потому что ваши тесты уже находятся в нескольких доменах приложений, хотя и в разных процессах. Если вы добавите любой из этих флагов, он будет работать как положено.

Тем не менее, NUnit не должен быть сбой в этой ситуации, поэтому, пожалуйста, сообщите об этом на GitHub.

Другие вопросы по тегам