Как заставить nunit3-console выводить мою отладку на экран (в окне Windows)?

Я использовал NUnit для успешного выполнения модульных тестов C# в Visual Studio 2013, с графическим интерфейсом NUnit и с консолью NUnit.

Для первых двух я могу получить отладочный вывод (Console.Write(...)). В Visual Studio 2013 его можно просмотреть, щелкнув ссылку вывода после теста, а в графическом интерфейсе отладка отображается в окне вывода.

Когда я запускаю это с помощью nunit3-console.exe, я просто получаю сводный отчет. Я попытался посмотреть, что находится в выводе XML (в TestResults.xml), но он просто содержит больше того же сводного отчета.

Как я могу заставить мою отладку также выводиться на экран?

Моя командная строка выглядит так:

nunit3-console.exe "c:\path\to\my\assebly.dll" --trace=Verbose --test=Regression.Tests.HelloWorld

В тестовом HelloWorld есть строка Console.Write("Hello World\r\n");, и я хочу, чтобы она отображалась на экране (стандартный вывод).


person code_fodder    schedule 25.09.2017    source источник


Ответы (1)


Ваш Console.WriteLine(...) должен появиться в выводе, но в NUnit 3 вы должны использовать TestContext.WriteLine(...) в своих тестах. Поскольку NUnit 3 может выполнять ваши тесты параллельно, он фиксирует эти выходные данные, а затем выводит их на консоль после завершения выполнения теста. Таким образом, выходные данные сопоставляются с тестом, а не чередуются с другими тестами.

Если вы хотите, чтобы ваш вывод выводился сразу после записи, используйте TestContext.Progress.WriteLine(...). Например, следующий тест,

    [Test]
    public void ExampleOfConsoleOutput()
    {
        Console.WriteLine("Console.WriteLine In ExampleOfConsoleOutput");
        TestContext.WriteLine("TestContext.WriteLine In ExampleOfConsoleOutput");
        TestContext.Progress.WriteLine("TestContext.Progress.WriteLine In ExampleOfConsoleOutput");
    }

Выводит следующее,

=> nunit.v3.TestNameInSetup.ExampleOfConsoleOutput
TestContext.Progress.WriteLine In ExampleOfConsoleOutput
Console.WriteLine In ExampleOfConsoleOutput
TestContext.WriteLine In ExampleOfConsoleOutput

Обратите внимание, что сообщение о ходе выполнения было выведено перед другим выводом, даже если оно было последним в тесте.

Вам также не нужна опция командной строки --trace. Это для внутренней трассировки NUnit. Параметр командной строки для управления выводом — --labels, хотя значения по умолчанию (без параметров командной строки) показывают приведенный выше вывод.

person Rob Prouse    schedule 25.09.2017
comment
Re: Console.Write(...); ... вы правы, отладка выходила в конце теста, я как-то пропустил это (я ожидал, что она выйдет в реальном времени) ... я был слеп!. Но чего мне действительно хотелось, так это отладки в реальном времени, и TestContect.Progress.Write(...) отлично работает! - большое спасибо. - person code_fodder; 26.09.2017
comment
TestContext.WriteLine также работал с: Linux (Ubuntu 20.04 MATE (Focal Fossa), с Cinnamon), .NET Core (3.1.5) и NUnit 3.12.0. - person Peter Mortensen; 25.06.2020