2013-02-26 11 views
23

Ich benutze XUnit mit dem ReSharper Test Runner und dem xUnitContrib Resharper Plugin.Mit ReSharper, wie Debug-Ausgabe während eines lang laufenden Komponententests angezeigt wird?

Wenn ich einen lang andauernden Test habe, würde ich gerne in der Lage sein, eine Fortschrittsanzeige in das Unit Test Output Fenster auszugeben.

Ich habe versucht Debug.WriteLines, Trace.WriteLine und . Alle haben das gleiche Verhalten - im Ausgabefenster wird nichts angezeigt, bis der Test abgeschlossen ist.

Zum Beispiel:

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

    Thread.Sleep(10000); 
} 

Der Test zeigt keine Ausgabe, bis die 10 Sekunden verstrichen sind, und der Test abgeschlossen ist. Wie kann ich auf dem Weg ausgegeben werden?

UPDATE 1

Ich habe auch versucht mit MSTest und NUnit. NUnit ist die einzige, die die Ausgabe auf dem Weg zeigt.

MSTest und XUnit geben keine Ausgabe zurück, bis der Test abgeschlossen ist. Das seltsame ist, dass während der XUnit und NUnit-Test Ausgabe wie folgt aussieht:

A 
B 
C 

Die MSTest Ausgabe wie folgt aussieht:

C 


Debug Trace: 

A 
B 

alle diese Variationen gegeben, ich denke, die Antwort ist, dass es ist es Sache der Testläufer-Implementierung zu entscheiden, wie und wann sie ausgeben soll. Weiß jemand, ob es möglich ist, den XUnit Test Runner zu konfigurieren?

UPDATE 2

Ich denke, dies ist ein Mangel in xUnitContrib sein muss. Veröffentlicht zu ihrer CodePlex issue tracker.

+0

Debug.WriteLine() funktioniert perfekt Gut für mich, wenn ich im Debug-Modus bin. Wenn Sie sich also allgemein anmelden möchten, empfehle ich Brentons Antwort – derape

+0

@derape - Nein, es funktioniert nicht mit xunit. Keine Ausgabe erscheint, bis der Test abgeschlossen ist. –

+0

Ich sehe, ich habe nicht mit XUnit gespielt - nur NUnit. Und NUnit-Protokollierung funktioniert entlang der Debug-Threads ... – brenton

Antwort

0

Die einfachste, die ich gefunden habe, ist log4net zu verwenden und einen Konsolenlogger zu erstellen. Auf dem Weg, während Sie laufen, würden Sie logger.Info ("info here") aufrufen; oder log.Debug ("info hier"); - wirklich, was auch immer Ihre bevorzugte Protokollierungsstufe - und die Ausgabe wird in Resharper Unit Test Sessions angezeigt.

Lesen Sie mehr über das log4net-Framework on the Apache log4net homepage. Die configuration examples wird auch von unschätzbarem Wert sein.

+0

Nein. Log4net hinzugefügt, und diese Nachrichten machen es überhaupt nicht in die Unit-Test-Ausgabe. Ich benutzte einen einfachen Konsolenappender - den aus den Beispielen. –

7

ReSharper entfernt irgendwie die Standard-Listener in Unit-Tests.Um Text im Ausgabefenster angezeigt werden, fügen Sie einfach die folgende Zeile:

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

Dies funktionierte nicht für mich, entweder im Fenster Unit Test Sessions oder im Output-Fenster (mit MSTest). –

21

Wenn Sie xUnit.net 1.x verwendet, können Sie vorher haben die Ausgabe geschrieben wird auf Konsole, Debug oder Trace. Wenn xUnit.net v2 standardmäßig mit der Parallelisierung ausgeliefert wurde, war dieser Ausgabeaufnahmemechanismus nicht mehr geeignet. Es ist unmöglich zu wissen, welche der vielen Tests, die parallel ausgeführt werden könnten, dafür verantwortlich waren, an diese freigegebenen Ressourcen zu schreiben. Benutzer, die Code von v1.x zu v2.x portieren, sollten stattdessen eine der zwei neuen Methoden verwenden.

Werfen Sie einen Blick hier zum Beispiel dafür, wie mit xUnit.net v2 auszuführen Protokollierung:

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

Dies ist das Beispiel:

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

Genau das habe ich gesucht. Vielen Dank! – nrodic

+0

Dies ist nützlich, um Ausgaben innerhalb der Tests zu schreiben, aber wenn Sie Informationen in Echtzeit aus dem von den Tests aufgerufenen Code ausgeben müssen, müssen Sie den zu überprüfenden Code anpassen, um "ITestOutputHelper" zu verwenden. Ich verstehe das Problem der Nebenläufigkeit, die es schwierig macht, die Ausgabe aus dem Code zu handhaben, ich wollte nur für andere darauf hinweisen, dass diese Lösung eine Beschränkung hat. Es wäre schön, etwas wie Trace-Listener zu nutzen oder den Standard-Ausgabestrom für die 'Debug.Write *' -Methoden zu übernehmen. –

Verwandte Themen