и поэтому тест не записывал данные в консоль до того, как объект консоли был очищен средой выполнения (при запуске только одного теста). Решением было сначала преобразовать набор результатов в список, чтобы я мог использовать не асинхронную версию forEach ():

вызов в моих модульных тестах либоDebug.Write(line) или жеConsole.Write(Line) просто пропускается во время отладки и вывод никогда не печатается. Звонки на эти функции из классов, которые я использую, работают нормально.

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

Ответы на вопрос(13)

Я также пытался заставить Debug, Trace, Console или TestContext работать в модульном тестировании.

Ни один из этих методов не будет работать или показывать вывод в окне вывода.

    Trace.WriteLine("test trace");
    Debug.WriteLine("test debug");
    TestContext.WriteLine("test context");
    Console.WriteLine("test console");

VS2012 и Большой
(из комментариев) В Visual Studio 2012 нет значка. Вместо этого в результатах теста есть ссылкаВыход, Если вы нажмете на ссылку, вы увидите всеWriteLine.

До VS2012
Затем я заметил в моемРезультаты теста после запуска теста, рядом смаленький успех зеленый кружок Есть еще один значок, я дважды щелкнул по нему. Это были результаты моего теста, и он включал все типы писем выше.

 HankCa08 янв. 2018 г., 04:20
В Visual Studio 2017 это все еще ссылка «Вывод».
 kevin18 мая 2014 г., 13:00
Боже, эту ссылку «Выход» сложно найти. Если кто-то изо всех сил пытается найти его, он находится в Text Explorer, нижняя часть. Когда тест выбран, он показывает вам результат с «Истекшее время: ххх». Ниже это ссылка «Выход».
 Mike C10 июл. 2015 г., 23:24
@kevin, в какой версии VS ты это видел? (Я предполагаю, что вы имеете в виду «Test Explorer» вместо «Text Explorer».) Я не вижу ссылку «Вывод» в VS2013 express.
 epotter25 апр. 2013 г., 21:20
В Visual Studio 2012 нет значка. Вместо этого в результатах теста есть ссылка «Вывод». Если вы нажмете на ссылку, вы увидите все записи.
 Badgerspot06 авг. 2016 г., 23:40
Если кому-то интересно (как и мне), что из этого появляется в файле TRX (вывод результатов теста), то это все перечисленное, кроме «Debug.WriteLine».

когда мои настройки Test / Test Settings / Default Processor Architecture и сборки, на которые ссылается мой тестовый проект, не совпадают. В противном случае Trace.Writeline () работает нормально.

озревателя.

1) В вашем тестовом методе Console.WriteLine («что-то»);

2) Запустите тест.

3) В окне «Проводник тестов» щелкните «Метод пройденного теста».

4) И нажмите ссылку «Вывод».

И нажмите «Вывод», вы можете увидеть результат Console.Writeline ().

 matt3202 июн. 2018 г., 03:00
Отлично. Visual Studio / C # не является моей нормой для разработки, это всего лишь то, что мне нужно! Спасибо за публикацию.
 Mike IT12 июл. 2018 г., 19:56
Я использую 2017 версию 15.5.6 Бит О не вижу ссылку на выход.

ce.WriteLine () будут работать в режиме отладки.

Я делаю следующее: включаюиспользуя System.Diagnostics в тестовом модуле. Затем используйте Debug.WriteLine для моего вывода,щелкните правой кнопкой мыши на тесте, выбиратьОтладка выбранных тестов, Результат вывода теперь появится в окне «Вывод» ниже. Я использую Visual Studio 2017 vs 15.8.1, со стандартным фреймворком модульного тестирования, который обеспечивает VS.

Trace.WriteLine должно работать при условии, что вы выбрали правильный вывод (раскрывающийся список с надписью «Показать вывод из» находится в окне «Вывод»)

что запускаете свои юнит-тесты в Debug? Debug.WriteLine не будет вызываться в сборках Release.

Два варианта попробовать:

Trace.WriteLine (), который встроен в сборку релиза, а также отладку

Отключите DEBUG в настройках сборки для юнит-теста

нутого, поэтому я отправлю.
Моя проблема заключалась в том, что я не получал вывод, потому что я записывал набор результатов из асинхронного вызова Linq на консоль в цикле в асинхронном контексте:

var p = _context.Payment.Where(pp => pp.applicationNumber.Trim() == "12345");

p.ForEachAsync(payment => Console.WriteLine(payment.Amount));

и поэтому тест не записывал данные в консоль до того, как объект консоли был очищен средой выполнения (при запуске только одного теста). Решением было сначала преобразовать набор результатов в список, чтобы я мог использовать не асинхронную версию forEach ():

var p = _context.Payment.Where(pp => pp.applicationNumber.Trim() == "12345").ToList();

p.ForEachAsync(payment =>Console.WriteLine(payment.Amount));

Вы можете использовать этот пакет NuGet:https://www.nuget.org/packages/Bitoxygen.Testing.Pane/

Вызвать пользовательский метод WriteLine из этой библиотеки.
Он создает панель тестирования внутри окна вывода и всегда помещает туда сообщения (во время каждого запуска теста независимо от флагов DEBUG и TRACE).

Чтобы сделать трассировку проще, я могу порекомендовать создать базовый класс:

[TestClass]
public abstract class BaseTest
{
    #region Properties
    public TestContext TestContext { get; set; }

    public string Class
    {
        get { return this.TestContext.FullyQualifiedTestClassName; }
    }
    public string Method
    {
        get { return this.TestContext.TestName; }
    }
    #endregion

    #region Methods
    protected virtual void Trace(string message)
    {
        System.Diagnostics.Trace.WriteLine(message);

        Output.Testing.Trace.WriteLine(message);
    }
    #endregion
}

[TestClass]
public class SomeTest : BaseTest
{
    [TestMethod]
    public void SomeTest1()
    {
        this.Trace(string.Format("Yeah: {0} and {1}", this.Class, this.Method));
    }
}
 Bimal Poudel30 сент. 2016 г., 19:43
Магия заключается в: Output.Testing.Trace.WriteLine (message); с BitOxygen.
 Console09 июл. 2018 г., 11:59
Не работает с текущей версией Visual Studio, вы получаете сообщение об ошибкеCould not load file or assembly 'Microsoft.VisualStudio.Shell.12.0,

Решено с помощью следующего примера:

public void CheckConsoleOutput()
    {
        Console.WriteLine("Hi Hi World");
        Trace.WriteLine("Trace Trace the World");
        Debug.WriteLine("Debug Debug WOrld");
        Assert.IsTrue(true);
    }

После выполнения этого теста в разделе «Пройдено тестирование» есть возможность просмотреть выходные данные, которые откроют окно вывода.

Решение Вопроса

TestContext.WriteLine() который выводит текст в результатах теста.

Пример:

    [TestClass]
    public class UnitTest1
    {
        private TestContext testContextInstance;

        /// <summary>
        ///  Gets or sets the test context which provides
        ///  information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get { return testContextInstance; }
            set { testContextInstance = value; }
        }

        [TestMethod]
        public void TestMethod1()
        {
            TestContext.WriteLine("Message...");
        }
    }

«Магия» описана вMSDN как «Среда тестирования автоматически устанавливает свойство, которое затем можно использовать в модульных тестах».

 Walter07 нояб. 2017 г., 22:59
Метод WriteLine в TestContext принимает те же параметры, что и Console.WriteWriteLine. Это означает, что строка является строкой форматирования (задокументирована вdocs.microsoft.com/en-us/dotnet/standard/base-types/...). Чтобы использовать литерал {в строке, вам нужно удвоить его. Чтобы напечатать вашу строку, используйте WriteLine ("he {{ll}} o");
 Patrick Steadman24 нояб. 2015 г., 22:48
Похоже, что для использования TestContext требуется VS2015 Enterprise (или премиум-версии более ранних версий), согласноэта документация
 Mike K20 июл. 2017 г., 23:08
Я заметил, что если в вашей строке есть фигурные скобки, метод взрывается. Так что "_testContext.WriteLine (" hello ");" работает, но "_testContext.WriteLine (" он {ll} o ");" завершается с ошибкой «System.FormatException: входная строка была в неправильном формате».
 fusi24 сент. 2015 г., 13:15
Я обнаружил (с VS2013), что это только печатает что-то, если тест выполняется в режиме отладки.

Debugger.Log(0, "1", input);

PS: вы можете использоватьDebugger.Break(); чтобы вы могли видеть, что вы вошлиout

я использую XUnit, поэтому в случае, если вы используете именно это, следуйте этим инструкциям:

https://xunit.github.io/docs/capturing-output.html

Этот метод группирует ваш вывод с каждым конкретным модульным тестом.

using Xunit;
using Xunit.Abstractions;

public class MyTestClass
{
    private readonly ITestOutputHelper output;

    public MyTestClass(ITestOutputHelper output)
    {
        this.output = output;
    }

    [Fact]
    public void MyTest()
    {
        var temp = "my class!";
        output.WriteLine("This is output from {0}", temp);
    }
}

Есть другой метод, указанный в ссылке, которую я предоставил для записи в ваше окно вывода, но я предпочитаю предыдущий.

Console.WriteLine()

Призыв кDebug.WriteLine будет сделано только во время определения DEBUG.

Другие предложения использовать:Trace.WriteLine также, но я не пробовал это.

Существует также вариант (не уверен, если VS2008 имеет его), но вы все еще можете использоватьDebug.WriteLine когда вы запускаете тест сTest With Debuggerвариант в IDE

Ваш ответ на вопрос