2016-05-30 4 views
2

Ich versuche Einheitentests für einen OWIN-Dienst zu schreiben, aber alle Protokollanweisungen in meinen Tests beginnen zu duplizieren, sobald ich die Tests auf einmal ausgeführt habe und die Protokollausgabe auf dem Build-Server aufgrund des Rauschens wirklich nutzlos gemacht habe.Owin TestServer protokolliert mehrere Male während des Tests - wie kann ich das beheben?

[TestFixture] 
public class ServerTest 
{ 
    [Test] 
    public void LogOnce() 
    { 
     using (TestServer.Create(app => { })) 
     { 
      Debug.WriteLine("Log once"); 
     } 
    } 

    [Test] 
    public void LogTwice() 
    { 
     using (TestServer.Create(app => { })) 
     { 
      Debug.WriteLine("Log twice"); 
     } 
    } 
} 

Wenn ich laufe ein Test in einer Zeit, ich die erwartete Ausgabe:: Ich habe das Problem auf eine sehr einfache Repro destilliert

=> ServerTest.LogOnce 
Log once 

=> ServerTest.LogTwice 
Log twice 

Wenn ich die Tests auf einmal laufen I erhalten:

=> ServerTest.LogOnce 
Log once 

=> ServerTest.LogTwice 
Log twice 
Log twice 

initialisieren, sobald die Testserver das Problem lösen, aber ich bin auf der Suche nach einer Lösung, die ich so viele Testserver-Instanzen weiterhin erlaubt Instanziierung wie ich will.

Antwort

2

Dieser Beitrag zeigt auf, wie HostingEngine auf dem Tracelistener und Weise wird säumige diese deaktivieren: TraceListener in OWIN Self Hosting

Mit dieser Einsicht, verfolgen ich durch den Quellcode von TestServer.Create und bestätigte, dass es intern eine HostingEngine schafft Dadurch wird ein TraceListener aktiviert, der letztendlich Ergebnisse an die Konsole ausgibt. Ich habe bestätigt, dass die höchste Bewertung (zum Zeitpunkt des Schreibens) auf dieser Seite für den TestServer funktioniert und glaube, dass die anderen Lösungen auch ausgezeichnete Möglichkeiten bieten.

Es war sehr zeitaufwendig und nervig, dies herauszufinden. Es ist schwierig zu entdecken und nicht offensichtlich, ein Opt-out zu verkabeln. Eine Opt-In-Lösung wäre besser.

Verwandte Themen