2011-01-24 16 views
54

Każda rozmowa w moich testów jednostkowych do obu Debug.Write(line) lub Console.Write(Line) prostu dostaje pomijane podczas debugowania i wyjście nie zostanie wydrukowany. Połączenia z tymi funkcjami z poziomu klas, z których korzystam działają dobrze.Jak pisać wyniki z testu jednostkowego?

Rozumiem, że badania jednostka ma być zautomatyzowana, ale nadal chciałby, aby móc komunikatów wyjściowych od badanej jednostki.

Odpowiedz

66

Spróbuj użyć TestContext.WriteLine(), która generuje tekst w wynikach testu.

Przykład: „Ramy testu automatycznie ustawia właściwość, którą można następnie wykorzystać w testy jednostkowe”

[TestClass] 
    public class UnitTest1 
    { 
     private TestContext testContextInstance; 

     /// <summary> 
     /// Gets or sets the test context which provides 
     /// information about and functionality for the current test run. 
     ///</summary> 
     public TestContext TestContext 
     { 
      get { return testContextInstance; } 
      set { testContextInstance = value; } 
     } 

     [TestMethod] 
     public void TestMethod1() 
     { 
      TestContext.WriteLine("Message..."); 
     } 
    } 

„Magiczny” opisany jest w MSDN jako

+1

Znalazłem (z VS2013), że to tylko drukuje coś, jeśli test jest uruchamiany w trybie debugowania. – fusi

+2

Wygląda na to, że użycie TestContext wymaga VS2015 Enterprise (lub starszych wersji wcześniejszych wersji), zgodnie z [tą dokumentacją] (https://msdn.microsoft.com/en-us/library/dd465178 (v = vs.140). aspx) –

+0

Zauważyłem, że jeśli twój ciąg ma nawiasy klamrowe, metoda rozkręca się. Tak więc "_testContext.WriteLine (" hello ");" działa, ale "_testContext.WriteLine (" on {ll} o ");" kończy się niepowodzeniem z "System.FormatException: Ciąg wejściowy nie był w poprawnym formacie." –

0

Spróbuj użyć:

Console.WriteLine()

będą dokonywane wyłącznie Wezwanie do Debug.WriteLine podczas gdy DEBUG jest zdefiniowany.

Inne propozycje są w użyciu: Trace.WriteLine jak dobrze, ale nie próbowałem tego.

Istnieje również opcja (nie wiem, czy ma to VS2008), ale nadal można używać Debug.WriteLine po uruchomieniu testu z Test With Debugger opcji w IDE

0

Czy jesteś pewien, że używasz swoich testów jednostkowych w Debug ? Debug.WriteLine nie zostanie spakowany w kompilacjach wydań.

dwie opcje, aby spróbować to:

  • Trace.WriteLine(), która jest zbudowana inot uwolnienia kompilacje jak debug

  • Undefine DEBUG w ustawieniach kompilacji dla testów jednostkowych

103

Jest trochę późno na rozmowy.

ja też próbuje Debug lub Śledzenie lub konsoli lub TestContext pracować w Unit Testing.

Żadna z tych metod będzie wyglądał pracy lub pokazać wyjście w oknie wyjściowym.

Trace.WriteLine("test trace"); 
    Debug.WriteLine("test debug"); 
    TestContext.WriteLine("test context"); 
    Console.WriteLine("test console"); 

VS2012 i Greater
(z komentarzami) W Visual Studio 2012, nie ma ikony. Zamiast tego istnieje link w wynikach testu o nazwie Wyjście. Jeśli klikniesz link, zobaczysz cały numer WriteLine.

Przed VS2012
I wtedy zauważyłem w moim Wyniki testu okno po uruchomieniu testu, obok mały sukces zielonym kółkiem, istnieje inna ikona, i dwukrotnie kliknąć go. To były moje wyniki testu i zawierał wszystkie typy listów powyżej.

+39

W programie Visual Studio 2012 nie ma ikony. Zamiast tego w wynikach testu znajduje się link o nazwie "Wyjście". Jeśli klikniesz link, zobaczysz wszystkie writelines. – epotter

+14

geez, że link "Wyjście" jest z natury trudny do znalezienia. Jeśli ktoś stara się go znaleźć, znajduje się w Eksploratorze tekstu, w dolnej części. Po wybraniu testu pokazuje wynik z "Czas, który upłynął: xxx". Poniżej znajduje się link "Wyjście". – kevin

+0

@kevin, w jakiej wersji VS to widziałeś? (Zakładam, że masz na myśli "Test Explorer" zamiast "Text Explorer.) Nie widzę linku wyjściowego w ekspresie VS2013 –

0

Nie otrzymuję danych wyjściowych, gdy ustawienie Test/Test ustawień/Domyślna architektura procesora i zestawienia, do których odnoszą się moje odniesienia do projektów testowych, nie są takie same. W przeciwnym razie Trace.Writeline() działa dobrze.

0

Używam xUnit więc to co używam: Debugger.Log(0, "1", input);

PS: można użyć Debugger.Break(); się więc widać zalogowaniu out

0

Trace.WriteLine powinny działać pod warunkiem wybrania prawidłowego wyjścia (Lista rozwijana oznaczona jako "Pokaż wynik z" znaleziona w oknie Wyjście)

3

Myślę, że nadal jest aktualna.

Można użyć tego pakietu Nuget: https://www.nuget.org/packages/Bitoxygen.Testing.Pane/

wywołanie metody niestandardowe WriteLine z tej biblioteki.
Tworzy panel testowy w oknie Output i umieszcza tam zawsze komunikaty (podczas każdego testu działa niezależnie od flag DEBUG i TRACE).

Aby śladu łatwiej mogę polecić, aby utworzyć klasę bazową:

[TestClass] 
public abstract class BaseTest 
{ 
    #region Properties 
    public TestContext TestContext { get; set; } 

    public string Class 
    { 
     get { return this.TestContext.FullyQualifiedTestClassName; } 
    } 
    public string Method 
    { 
     get { return this.TestContext.TestName; } 
    } 
    #endregion 

    #region Methods 
    protected virtual void Trace(string message) 
    { 
     System.Diagnostics.Trace.WriteLine(message); 

     Output.Testing.Trace.WriteLine(message); 
    } 
    #endregion 
} 

[TestClass] 
public class SomeTest : BaseTest 
{ 
    [TestMethod] 
    public void SomeTest1() 
    { 
     this.Trace(string.Format("Yeah: {0} and {1}", this.Class, this.Method)); 
    } 
} 
+1

Magia znajduje się w: Output.Testing.Trace.WriteLine (message); z BitOxygen. –

2

To zależy od badanego biegacza ... na przykład, używam xUnit, więc w przypadku, gdy co używasz , wykonaj następujące czynności:

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

Ta metoda grupy swoje wyjście z każdej konkretnej badanej jednostki.

 

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

Istnieje inna metoda wymieniona w linku podanym do zapisania w oknie Wynik, ale preferuję poprzednią.

0

rozwiązany z poniższym przykładzie:

public void CheckConsoleOutput() 
    { 
     Console.WriteLine("Hi Hi World"); 
     Trace.WriteLine("Trace Trace the World"); 
     Debug.WriteLine("Debug Debug WOrld"); 
     Assert.IsTrue(true); 
    } 

Po uruchomieniu tego testu, w pozycji „test zaliczony”, istnieje możliwość, aby zobaczyć wyjście, co spowoduje wyświetlenie okna wyjściowego.

Powiązane problemy