Хочется весь Debug.WriteLine переправлять в оутпут xUnit.
Посмотрел сюда
https://xunit.github.io/docs/capturing-output.html и наколхозил класс DebugOutputAdapter:
public class FirstTest
{
public FirstTest(ITestOutputHelper output)
{
DebugOutputAdapter.Bind(output);
}
[Fact]
public void PassingTest()
{
Debug.WriteLine("Line 1: " + DateTime.Now);
Thread.Sleep(4000);
Debug.WriteLine("Line 2: " + DateTime.Now);
Assert.Equal(4, Add(2, 2));
}
[Theory]
[InlineData(3)]
[InlineData(5)]
[InlineData(6)]
public void MyFirstTheory(int value)
{
Debug.WriteLine("Check theory using " + value);
Assert.True(IsOdd(value));
}
bool IsOdd(int value)
{
return value % 2 == 1;
}
}
На удивление Resharper "плавно" показывает output в PassingTest. То есть сразу показывает
Line 1: 10/30/2017 1:25:17 PM
потом ждет 4 секунды и показывает
Line 2: 10/30/2017 1:25:21 PM
Вопрос. Как
не писать в
каждом-каждом тест-классе такой как выше конструктор?
public Имя_Тест_Класса(ITestOutputHelper output)
{
DebugOutputAdapter.Bind(output);
}
P.S. Понятно выполнение тестов надо сериализовывать что бы output не перемешивался.
P.P.S. и ещё вопрос — xUnit сортирует ли имена классов и методов при сериализации выполнения как и NUnit консольные и решарперовские раннеры?
| Сам банальный класс DebugOutputAdapter |
| class DebugOutputAdapter
{
static ITestOutputHelper CurrentOutput = null;
static DebugOutputAdapter()
{
Debug.Listeners.Add(new MyTraceListener());
}
public static void Bind(ITestOutputHelper output)
{
CurrentOutput = output;
}
class MyTraceListener : TraceListener
{
public override void Write(string message)
{
}
public override void WriteLine(string message)
{
if (CurrentOutput != null)
CurrentOutput.WriteLine(message);
}
}
}
|
| |
Здравствуйте, VladCore, Вы писали:
VC>Вопрос. Как не писать в каждом-каждом тест-классе такой как выше конструктор?
Простой способ: использовать NUnit. Сложный: захватывать text out и протаскивать его неявно, что-то типа
такого. Остальная обвязка в той же папке. Проверяйте только, от версии к версии у xUnit отваливается вывод результатов для canceled и failed тестов.
VC>P.P.S. и ещё вопрос — xUnit сортирует ли имена классов и методов при сериализации выполнения как и NUnit консольные и решарперовские раннеры?
Неа. Стандартный ответ на "как сделать что-то в xUnit":
вам это не надо.
P.S. Не, можно извратиться с
ITestCollectionOrderer/ITestCaseOrderer, но это тож не очень удобно.
Здравствуйте, Sinix, Вы писали:
S>Простой способ: использовать NUnit. Сложный: захватывать text out и протаскивать его неявно, что-то типа такого. Остальная обвязка в той же папке. Проверяйте только, от версии к версии у xUnit отваливается вывод результатов для canceled и failed тестов.
Ну так я и пользуюс NUnit, но он в третей версии output выводит не плавно как во второй, а сразу все вываливает только по окончании тест-метода. сейчас только xUnit плавно (синхронно) выводит в решарпере output.
P.S. про интерфейс сортировки методов я видел. вопрос был про дефолтовое поведение. В NUnit сортирует и классы и методы по алфавиту. без всяких настроек
Здравствуйте, VladCore, Вы писали:
VC>Ну так я и пользуюс NUnit, но он в третей версии output выводит не плавно как во второй, а сразу все вываливает только по окончании тест-метода. сейчас только xUnit плавно (синхронно) выводит в решарпере output.
См вот
этот коммент и весь топик целиком. Ну и
вот это ещё.