2008-10-06 3 views
5

Ich versuche, TestDriven.Net nicht nur zu verwenden, um meinen Code zu testen, sondern eine Funktion in meinem Code aufzurufen, dessen Zweck es ist, den internen Status des Codes im Debug-Fenster auszudrucken.Wie sehe ich Debug.WriteLine-Anweisungen bei Verwendung von TestDriven.Net?

Hier ist ein sehr vereinfachtes Beispiel, was ich versuche zu tun ..

<TestFixture()> _ 
Public Class UnitTest 

    <Test()> _ 
    Public Sub TestDebug() 
     Dim oClass1 As New Class1 

     Assert.AreEqual(True, oClass1.IsTrue) 

     Debug.WriteLine("About to call .PrintDebug()") 
     oClass1.PrintToDebug() 

    End Sub 

End Class 

Public Class Class1 

    Private _IsTrue As Boolean = True 

    Public ReadOnly Property IsTrue() As Boolean 
     Get 
      Return _IsTrue 
     End Get 
    End Property 

    Public Sub PrintToDebug() 
     Debug.WriteLine("Internal state of Class1: " & _IsTrue) 
    End Sub 

End Class 

Ich versuche, die öffentliche Schnittstelle von Class1 zu testen und sehen irgendwie die Ausgabe von der Class1.PrintToDebug() Funktion.

Ich habe die TestDriven.Net quickstart sah durch, die Beispiele für die Verwendung der Debug.WriteLine in einem Unit-Test zeigt, aber seltsam für mich nicht funktioniert entweder - das ist die einzige Output in meinem ‚Test‘ Fenster ist:

------ Test started: Assembly: ClassLibrary1.dll ------ 


1 passed, 0 failed, 0 skipped, took 1.19 seconds. 

Ich habe versucht, in den anderen Fenstern zu suchen (Debuggen und Erstellen), im Debug-Fenster sind die Optionen 'Programmausgabe' und 'Ausnahmenmeldungen' aktiviert.

Ich habe nach Optionen oder Vorlieben gesucht und kann keine finden!

Danke für Ihre Hilfe!


Edit: Ich verwende VB.Net 2.0, TestDriven.Net 2190.02.14 und NUnit 2.4.8.0

Antwort

10

Ich fand, dass während Debug.WriteLine() nicht mit Unit-Tests nicht funktionieren , Console.WriteLine() tut.

Der Grund ist, dass beim Ausführen von Tests der Debugger-Prozess nicht aufgerufen wird und Debug.WriteLine() ignoriert wird. Wenn Sie jedoch "Test with Debugger" verwenden, denke ich (habe nicht versucht) Debug.WriteLine() wird funktionieren.

+0

Danke für die Anregung, aber ich bekomme keine Ausgabe entweder den ‚Test mit Debugger‘ Option. Seltsam, dass in ihrer Dokumentation "Debug.WriteLine" und "Run Tests" angezeigt werden! http://www.testdriven.net/quickstart.aspx#Run%20Test(s) – Andrew

+0

Probieren Sie einfach die Console.WriteLine() und es wird im Testfenster angezeigt. Ich werde das jetzt versuchen, nochmals vielen Dank: o) – Andrew

+0

Ich akzeptiere deine Antwort, da das Ändern der Debug.WriteLine() - Anweisungen den Zweck erfüllt hat. Console.WriteLine hat funktioniert, obwohl ich mich dafür entschieden habe, stattdessen Trace.WriteLine zu verwenden: o) – Andrew

2

Trace.WriteLine() scheint die Antwort zu sein: o)

Hier ist die Ausgabe für das Beispiel aus meiner Frage, mit Trace statt Debug:

------ Test started: Assembly: ClassLibrary1.dll ------ 

Internal state of Class1: True 

1 passed, 0 failed, 0 skipped, took 0.61 seconds. 

Eines habe ich allerdings gefunden habe. Die Ausführung wird bei der ersten Assertion der Testeinheit für fehlgeschlagene Einheiten angehalten, was bedeutet, dass Trace Anweisungen nicht ausgeführt werden, wenn eine Assert() über ihnen fehlschlägt.

+0

Ja, deshalb ist es empfehlenswert, eine einzige Assert pro Test zu haben. –

0

IIRC, dieser Ausgang wird nur im Ausgabefenster angezeigt, wenn ein Einzeltest ausgeführt wird. Klicken Sie mit der rechten Maustaste auf die Testmethode, um nur diesen Test auszuführen ...?

+1

Das ist, wie ich es mache, aber immer noch keine Ausgabe von Debug.WriteLine() - Ich habe zu Trace.WriteLine gewechselt und es funktioniert: o/ – Andrew

+0

Interessant - Prost –

0

"Run Tests ..." nimmt jede Einstellung auf, die Sie zur Erstellung Ihrer Lösung/Ihres Projekts haben.

Sie müssen sicherstellen, dass die aktuellen Build-Einstellungen für Ihre Lösung/Projekt auf „Debug“ gesetzt und nicht auf „Release“ (sonst Debug.Write *() Anrufe sind conditionally vom Compiler entfernt).

1

Sie möchten vielleicht wissen, dass 2.16 (die aktuelle Beta-Version) enthält:

1587: Immer Konsole Ausgang/Fehler und Testrunner Meldungen

Test-Runner-Nachrichten und Konsolenausgabe wird nun angezeigt erzeugt anzuzeigen, wenn alle Tests laufen in ein Projekt/Lösung.

1588: Optional Anzeige trace/debug ausgegeben, wenn alle Tests in Projekt/Lösung

standardmäßig Trace/Debug-Ausgabe ist nicht ausgeführt wird angezeigt, wenn alle Tests in ein Projekt/Lösung ausgeführt wird. Dieses Verhalten kann über den TesDriven.Net Optionsbereich geändert werden.

So scheint es, dass es in der nächsten Version funktionieren wird.

+0

Großartig! danke für das update: o) – Andrew

2

Verwenden Sie stattdessen Trace.WriteLine (...). Der Aufruf von Debug.WriteLine (...) wird nur ausgeführt, wenn DEBUG definiert ist. Standardmäßig definieren neue Visual Studio-Projekte nicht mehr DEBUG, sondern TRACE.

Ich sollte das Quickstart-Beispiel wirklich ändern, um stattdessen Trace zu verwenden.

Grüße, Jamie.

+1

+1 wie du es schreibst! – RichardOD

+0

-1 funktioniert auch nicht mit Trace (aber ist konfigurierbar durch die Optionen) –

+0

und es druckt direkt nach dem Test beendet! –

0

STRG + ALT + I zeigen Ihnen die sofortigen Fenster