Ответ 1
Per Брэд Уилсон:
Это ограничение в xUnit.net, а не адаптере Resharper.
Мы рассмотрим это в v2 xUnit.net.
Я использую 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.
Per Брэд Уилсон:
Это ограничение в xUnit.net, а не адаптере Resharper.
Мы рассмотрим это в v2 xUnit.net.
Если вы использовали 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);
}
}
ReSharper каким-то образом удалил прослушиватель по умолчанию в модульных тестах. Чтобы отобразить текст в окне "Вывод", просто добавьте эту строку:
Debug.Listeners.Add(new DefaultTraceListener());
Для NUnit это работает:
Console.SetOut(TestContext.Progress);
** Поздний ответ - потому что у меня была та же проблема, и я просто решил ее. может помочь другим
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)
{
}
}
Самый легкий, который я нашел, - это использовать log4net и создать консольный регистратор. По пути, когда вы работаете, вы можете вызвать logger.Info( "info here" ); или log.Debug( "информация здесь" ); - действительно, какой бы ни был ваш предпочтительный уровень ведения журнала, - и вывод будет отображаться в Resharper Unit Test Sessions.
Подробнее о структуре log4net читайте на главной странице Apache log4net. Примеры также будут неоценимы.
Вы также можете рассмотреть возможность использования xunit.NLog
который является очень хорошим и чистым способом внедрения ITestOutputhelper
в ваши SUT.
http://www.tomdupont.net/2015/06/capture-xunit-test-output-with-nlog-and.html