Подтвердить что ты не робот

Использование ReSharper, как показать вывод отладки во время долгого unit test?

Я использую xUnit с тестовым бегуном ReSharper и xUnitContrib плагин resharper.

Когда у меня есть длительный тест, я хочу, чтобы вывести индикатор прогресса в окно вывода Unit Test.

Я пробовал Debug.WriteLines, Trace.WriteLine и Console.WriteLine. Все из них имеют одинаковое поведение - ничто не отображается в окне вывода до завершения теста.

Например:

[Fact]
public void Test()
{
    Debug.WriteLine("A");
    Trace.WriteLine("B");
    Console.WriteLine("C");

    Thread.Sleep(10000);
}

Тест не показывает выход до истечения 10 секунд, и тест завершается. Как я могу получить выход по пути?

ОБНОВЛЕНИЕ 1

Я также пытался использовать MSTest и NUnit. NUnit - единственный, который показывает результат на этом пути.

MSTest и XUnit не возвращают никакого вывода до завершения теста. Странная часть состоит в том, что, хотя результаты теста XUnit и NUnit выглядят следующим образом:

A
B
C

Результат MSTest выглядит следующим образом:

C


Debug Trace:

A
B

Учитывая все эти варианты, я думаю, что ответ заключается в том, что до реализации тестового бегуна решать, как и когда выводить. Кто-нибудь знает, можно ли настроить тестовый бегун XUnit?

ОБНОВЛЕНИЕ 2

Я думаю, что это должно быть недостатком xUnitContrib. Добавлено в отслеживание ошибок CodePlex.

4b9b3361

Ответ 2

Если вы использовали xUnit.net 1.x, вы, возможно, ранее записывали вывод на консоль, отладка или трассировка. Когда xUnit.net v2 поставляется с распараллеливание включено по умолчанию, этот механизм захвата вывода больше не подходит; невозможно узнать, какая из многих тесты, которые могут выполняться параллельно, отвечали за на эти общие ресурсы. Пользователи, переносящие код с v1.x в Вместо этого v2.x должен использовать один из двух новых методов.

Посмотрите здесь, например, как выполнить ведение журнала с помощью xUnit.net v2:

http://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);
    }
}

Ответ 3

ReSharper каким-то образом удалил прослушиватель по умолчанию в модульных тестах. Чтобы отобразить текст в окне "Вывод", просто добавьте эту строку:

Debug.Listeners.Add(new DefaultTraceListener());

Ответ 4

Для NUnit это работает:

Console.SetOut(TestContext.Progress);

** Поздний ответ - потому что у меня была та же проблема, и я просто решил ее. может помочь другим

Ответ 5

XunitLogger использует AsyncLocal<T> для отслеживания контекста ведения журнала, поэтому вызовы Trace.Writeline и Console.Writeline могут быть направлены на правильный экземпляр ITestOutputHelper.

Использование:

static class ClassBeingTested
{
    public static void Method()
    {
        Trace.WriteLine("From Trace");
        Console.WriteLine("From Console");
        Console.Error.WriteLine("From Console Error");
    }
}

public class TestBaseSample  :
    XunitLoggingBase
{
    [Fact]
    public void Write_lines()
    {
        WriteLine("From Test");
        ClassBeingTested.Method();

        var logs = XunitLogger.Logs;

        Assert.Contains("From Test", logs);
        Assert.Contains("From Trace", logs);
        Assert.Contains("From Console", logs);
        Assert.Contains("From Console Error", logs);
    }

    public TestBaseSample(ITestOutputHelper output) :
        base(output)
    {
    }
}

Ответ 6

Самый легкий, который я нашел, - это использовать log4net и создать консольный регистратор. По пути, когда вы работаете, вы можете вызвать logger.Info( "info here" ); или log.Debug( "информация здесь" ); - действительно, какой бы ни был ваш предпочтительный уровень ведения журнала, - и вывод будет отображаться в Resharper Unit Test Sessions.

Подробнее о структуре log4net читайте на главной странице Apache log4net. Примеры также будут неоценимы.