/ / Jak używając ReSharper, jak wyświetlić wyniki debugowania podczas długotrwałego testu jednostkowego? - c #, studio wizualne, testy jednostkowe, resharper, xunit

Używając programu ReSharper, jak wyświetlić wyniki debugowania podczas długotrwałego testu jednostkowego? - c #, visual-studio, testowanie jednostkowe, resharper, xunit

Używam xUnit z programem testującym ReSharper i xUnitContrib wtyczka resharper.

Kiedy mam długotrwały test, chciałbym móc wyświetlić jakiś wskaźnik postępu w oknie Wyjście testu jednostkowego.

Próbowałem Debug.WriteLines, Trace.WriteLine i Console.WriteLine. Wszystkie zachowują się tak samo - nic nie pojawia się w oknie wyników, dopóki test się nie zakończy.

Na przykład:

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

Thread.Sleep(10000);
}

Test nie pokazuje wyniku, dopóki nie upłynie 10 sekund i test nie zostanie zakończony. Jak uzyskać wynik po drodze?

AKTUALIZACJA 1

Próbowałem także z MSTest i NUnit. NUnit jest jedynym, który pokazuje wyniki po drodze.

MSTest i XUnit nie zwracają żadnych danych wyjściowych, dopóki test się nie zakończy. Dziwne jest to, że podczas gdy wyniki testów XUnit i NUnit wyglądają tak:

A
B
C

Wyjście MSTest wygląda następująco:

C


Debug Trace:

A
B

Biorąc pod uwagę wszystkie te odmiany, myślę, że odpowiedźpolega na tym, że to od implementacji testera zależy, jak i kiedy wydrukować. Czy ktoś wie, czy można skonfigurować testera XUnit?

AKTUALIZACJA 2

Myślę, że to musi być niedobór xUnitContrib. Wysłano do ich Śledzenie problemów CodePlex.

Odpowiedzi:

22 dla odpowiedzi nr 1

Jeśli korzystałeś z xUnit.net 1.x, być może wcześniej pisałeś dane wyjściowe do konsoli, debugowania lub śledzenia. Kiedy xUnit.net v2 jest dostarczany z równolegle włączona domyślnie ten mechanizm przechwytywania danych wyjściowych nie był już odpowiedni; nie można wiedzieć, który z wielu testy, które mogły być uruchomione równolegle, były odpowiedzialne za pisanie do tych udostępnionych zasobów. Użytkownicy przenoszący kod z wersji 1.x na Wersja 2.x powinna zamiast tego użyć jednej z dwóch nowych metod.

Spójrz tutaj, na przykład, jak wykonać rejestrowanie za pomocą xUnit.net v2:

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

Oto przykład:

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);
}
}

7 dla odpowiedzi nr 2

ReSharper w jakiś sposób usunął domyślnego detektora w testach jednostkowych. Aby wyświetlić tekst w oknie Output, wystarczy dodać ten wiersz:

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

6 dla odpowiedzi nr 3

Za Brad Wilson:

Jest to ograniczenie w xUnit.net, a nie adapter Resharper.

Zajmiemy się tym w v2 xUnit.net.

http://xunitcontrib.codeplex.com/workitem/4160


0 dla odpowiedzi nr 4

Najłatwiejsze, jakie znalazłem, to użyć log4net iUtwórz rejestrator konsoli. Po drodze, gdy „biegniesz”, wywołujesz logger.Info („informacje tutaj”); lub log.Debug („informacje tutaj”); - naprawdę niezależnie od preferowanego poziomu rejestrowania - a dane wyjściowe pojawią się w sesji testowej jednostki Resharper.

Przeczytaj więcej o frameworku log4net na stronie głównej Apache log4net. The przykłady konfiguracji będzie również nieoceniony.