У меня есть тестовый проект в Visual Studio. Я использую Microsoft.VisualStudio.TestTools.UnitTesting .
Я добавляю эту строку в один из своих модульных тестов:
Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();
Когда я запускаю тест, он проходит успешно, но окно консоли вообще не открывается.
Есть ли способ сделать окно консоли доступным для взаимодействия с помощью модульного теста?
c#
.net
visual-studio
unit-testing
console-application
карандашТорт
источник
источник
Dump
метод расширения, который выводит содержимое объекта в консоль, что значительно упрощает отладку. i.imgur.com/MEZwy7X.pngОтветы:
ПРИМЕЧАНИЕ. Исходный ответ ниже должен работать для любой версии Visual Studio вплоть до Visual Studio 2012. Visual Studio 2013, похоже, больше не имеет окна результатов тестирования. Вместо этого, если вам нужен вывод, специфичный для теста, вы можете использовать предложение @ Stretch
Trace.Write()
для записи вывода в окно вывода.Console.Write
Метод не записывает на «консоли» - это пишет все , что зацепило до стандартного вывода рукоятки для процесса , запущенного. Точно так жеConsole.Read
считывает ввод с того, что подключено к стандартному вводу.Когда вы запускаете модульный тест через Visual Studio 2010, стандартный вывод перенаправляется тестовой оснасткой и сохраняется как часть вывода теста. Вы можете увидеть это, щелкнув правой кнопкой мыши окно результатов теста и добавив на дисплей столбец с именем «Вывод (StdOut)». Это покажет все, что было написано на стандартный вывод.
Вы можете вручную открыть окно консоли, используя P / Invoke, как говорит sinni800 . Из прочтения
AllocConsole
документации кажется, что функция будет сброшенаstdin
иstdout
будет указывать на новое окно консоли. (Я не уверен в этом на 100%; мне кажется неправильным, если я уже перенаправилstdout
Windows, чтобы украсть его у меня, но я не пробовал.)Но в целом я считаю, что это плохая идея; если все, что вы хотите использовать с помощью консоли, - это сбросить дополнительную информацию о своем модульном тесте, результат будет для вас. Продолжайте использовать,
Console.WriteLine
как вы есть, и по завершении проверьте результаты в окне «Результаты теста».источник
AllocConsole
документацию, я могу ошибаться, но мне придется проверить это.Кто-то прокомментировал эту явно новую функциональность в Visual Studio 2013. Сначала я не был уверен, что он имел в виду, но теперь, когда я это сделал, я думаю, что это заслуживает отдельного ответа.
Мы можем использовать Console.WriteLine как обычно, и вывод будет отображаться не в окне вывода, а в новом окне после того, как мы нажмем «Вывод» в деталях теста.
источник
Вы можете использовать эту строку для записи в окно вывода Visual Studio:
System.Diagnostics.Debug.WriteLine("Matrix has you...");
Должен работать в режиме отладки.
источник
Как уже говорилось, модульные тесты предназначены для запуска без взаимодействия.
Однако вы можете отлаживать модульные тесты, как и любой другой код. Самый простой способ - использовать Debugкнопку на вкладке «Результаты теста».
Возможность отладки означает возможность использовать точки останова. Таким образом , возможность использовать точки останова означает возможность использовать точки трассировки , которые я считаю чрезвычайно полезными при повседневной отладке.
По сути, точки трассировки позволяют вам писать в окно вывода (или, точнее, в стандартный вывод). При желании вы можете продолжить работу или остановиться как обычную точку останова. Это дает вам «функциональность», которую вы просите, без необходимости перестраивать код или заполнять его отладочной информацией.
Просто добавьте точку останова, а затем щелкните ее правой кнопкой мыши. Выберите вариант «При попадании ...»:
Это вызывает диалог:
Несколько замечаний:
Смотрите документацию для более подробной информации.
источник
Есть несколько способов записать выходные данные модульного теста Visual Studio на C #:
Подтверждено в Visual Studio 2013 Professional.
источник
Ты можешь использовать
для записи в окно вывода при отладке модульного теста.
источник
В Visual Studio 2017 TestContext не отображает ссылку вывода в обозревателе тестов.
Однако Trace.Writeline () показывает выходную ссылку.
источник
Во-первых, модульные тесты по замыслу должны выполняться полностью без взаимодействия.
Помимо этого, я не думаю, что об этом думали.
Вы можете попробовать взломать AllocConsole P / Invoke, который откроет консоль, даже если ваше текущее приложение является приложением с графическим интерфейсом. Затем
Console
класс отправит сообщение на открытую консоль.источник
Также можно использовать Debug.WriteLine ().
источник
IMHO, выходные сообщения в большинстве случаев актуальны только для неудачных тестовых случаев. Я составил следующий формат, и вы тоже можете создать свой собственный. Это отображается в самом окне обозревателя тестов Visual Studio.
Как мы можем отобразить это сообщение в окне обозревателя тестов Visual Studio?
Пример кода вроде этого должен работать:
if(test_condition_fails) Assert.Fail(@"Test Type: Positive/Negative. Mock Properties: someclass.propertyOne: True someclass.propertyTwo: True Test Properties: someclass.testPropertyOne: True someclass.testPropertyOne: False Reason for Failure: The Mail was not sent on Success Task completion.");
Вы можете создать для этого отдельный класс.
источник
У меня есть более простое решение (которое я использовал недавно по множеству ленивых причин). Добавьте этот метод в класс, в котором вы работаете:
public static void DumbDebug(string message) { File.WriteAllText(@"C:\AdHocConsole\" + message + ".txt", "this is really dumb. I wish Microsoft had more obvious solutions to its solutions problems."); }
Затем ... откройте каталог AdHocConsole и упорядочите по времени создания. Убедитесь, что когда вы добавляете свои «распечатки». Хотя они различны, иначе будет жонглирование.
источник
Visual Studio для Mac
Ни одно из других решений не работало в Visual Studio для Mac
Если вы используете NUnit , вы можете добавить к своему решению небольшой
.NET
консольный проект , а затем указать проект, который вы хотите протестировать, в Справочниках этого нового консольного проекта .Все, что вы делали в своих
[Test()]
методах, можно сделать вMain
консольном приложении следующим образом:class MainClass { public static void Main(string[] args) { Console.WriteLine("Console"); // Reproduce the unit test var classToTest = new ClassToTest(); var expected = 42; var actual = classToTest.MeaningOfLife(); Console.WriteLine($"Pass: {expected.Equals(actual)}, expected={expected}, actual={actual}"); } }
В этих обстоятельствах вы можете свободно использовать
Console.Write
иConsole.WriteLine
в своем коде.источник