2013-02-26 3 views
23

Я использую xUnit с тестовым бегуном ReSharper и плагином resharper xUnitContrib.Использование ReSharper, как показать вывод отладки во время длительной модульной проверки?

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

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

Например:

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

    Thread.Sleep(10000); 
} 

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

UPDATE 1

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

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

A 
B 
C 

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

C 


Debug Trace: 

A 
B 

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

UPDATE 2

Я думаю, что это должно быть дефицит в xUnitContrib. Добавлено в их CodePlex issue tracker.

+0

Debug.WriteLine() отлично работает отлично, когда я в режиме отладки. Поэтому, если вы хотите войти в систему в общем виде, я рекомендую ответить brenton – derape

+0

@derape - Нет, это не работает с xunit. Выходной сигнал не появляется до завершения теста. –

+0

Вижу, я не играл с XUnit - только NUnit. И протоколирование NUnit работает по потокам отладки ... – brenton

ответ

0

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

Подробнее о структуре log4net on the Apache log4net homepage. configuration examples также будет бесценным.

+0

Nope. Добавлен log4net, и эти сообщения даже не попадают в выходной тестовый модуль. Я использовал простой консольный appender - один из примеров. –

7

ReSharper какой-то образом удален слушатель по умолчанию в модульных тестах.Для отображения текста в окне Output, просто добавьте следующую строку:

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

Это не сработало для меня в окне «Сеансы тестовых сеансов» или окне «Выход» (используя MSTest). –

21

Если вы использовали xUnit.NET 1.x, вы, возможно, ранее писал вывод в консоли, Debug или Trace. Когда 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); 
    } 
} 
+0

Это именно то, что я искал. Спасибо! – nrodic

+0

Это полезно для записи результатов в рамках тестов, но когда вам нужно выводить информацию в режиме реального времени из кода, вызываемого тестами, вам нужно внести изменения в тестируемый код, чтобы пройти и использовать «ITestOutputHelper». Я понимаю проблему параллелизма, затрудняя обработку вывода кода, я просто хотел указать другим, что это решение имеет ограничение. Было бы неплохо использовать что-то вроде прослушивателей трассировки или захватить выходной поток по умолчанию для методов 'Debug.Write *'. –