2017-10-27 3 views
0

Meine Bibliothek hat einige Hintergrundthreads, die die Debugausgabe an Console.WriteLine() ausgeben. Beim ersten Test kann ich die Debug-Zeilen vom Hintergrund-Thread in der Ausgabe des Tests sehen. Aber die nächsten Tests zeigen diese Ausgabe nicht mehr.Warum zeigt NUnit keine Konsolenausgabe von Hintergrundthreads?

Wenn ich Console.WriteLine() in der Testmethode self aufrufen, dann ist dies in der Testausgabe zu sehen. Ich habe debuggen und der Testanruf

  • erste Console.WriteLine() in dem Test
  • dann ist Aufruf Console.WriteLine() im Hintergrund Test
  • zuletzt nennen Console.WriteLine() in der Test noch einmal.

Aber ich sehe nur die Ausgabe aus dem Test direkt und nicht die Ausgabe aus dem Hintergrund Thread.

Es sieht so aus, dass NUnit den Erfassungsbereich im Thread-Kontext gespeichert hat.

Wie bekomme ich die Konsolenausgabe von allen Hintergrundthreads?

+0

Vielleicht sollten Sie ein Problem mit NUnit öffnen? Nichts für ungut, aber ich bezweifle, dass jemand anderes eine Antwort haben wird. – NightOwl888

+2

Funktioniert TestContext.WriteLine()? –

+0

@RobProuse Die Bibliothek hat keinen Zugriff auf die NUnit-API. – Horcrux7

Antwort

2

Da unsere Bibliothek hat die Möglichkeit, die Protokollausgabe umleiten wir die Folge in den Tests tun können:

[SetUp] 
    public void FixtureSetUp() 
    { 
     MyLibrary.Console = TestContext.Out; 
    } 

Eine gute Lösung ist das nicht.

0

Es hängt von dem bestimmten Laufzeit-Build des NUnit-Frameworks ab, das Sie verwenden. Informationen zur Texterfassung werden in NUnits TestExecutionContext verwaltet, die in verschiedenen Builds unterschiedlich gespeichert sind.

Für alle Desktop-Builds (.NET 2.0, 3.5, 4.0 und 4.5) wird der aktuelle TestExecutionContext im CallContext beibehalten. Seit der TestExecutionClass implementiert ILogicalThreadAffinative, folgt der Kontext dem Test als neue Threads erstellt werden.

Für unsere beiden .NET Standard-Builds (1.3 und 1.6) wird der Kontext im Thread Local Storage beibehalten und folgt daher nicht der Erstellung neuer Threads. Dies ist eine Einschränkung, die wir zu überwinden hoffen, wenn es einen .NET Standard 2.0 Build gibt.

Verwandte Themen