2010-03-08 9 views
11

Ho lavorato su framework di test, che crea un nuovo dominio app per eseguire i test. Il motivo principale è che la DLL che stiamo testando ha un codice orribile che si basa sulla dll che si trova nel percorso del dominio dell'app. (No, non posso cambiare questo codice.)Come faccio a ottenere lo stdout nell'output più semplice durante l'esecuzione nel nuovo dominio dell'app?

Il problema che sto avendo è che il mio team di test sta scrivendo una serie di test funzionali in Mstest e uno dei logger, che scrive su Console.Out, non avere una qualsiasi delle informazioni del registro catturate nell'output di trx. Quando si esegue il codice tramite un'app console, tutte le informazioni del registro vengono visualizzate correttamente. Così fanno gli altri logger che sono stati implementati.

Il mio pensiero è che Mstest sta impostando il proprio TextWriter su Console.Out, ma la nuova app doin ha il proprio TextWriter per Console. Come il nuovo dominio app ha il proprio set di statiche.

Apprezzo le tue idee.

+0

Nota: questa domanda e la risposta accettata si applicano anche alla finestra "Output di testo" di NUnit e test che creano nuovi domini di app (e scrivono su stdout). –

risposta

10

Mi sento un po 'imbarazzato, ma una volta che ho colpito send e ci ho ripensato, il problema è diventato ovvio e ho trovato una soluzione.

Il problema è che la Console.Out originale era impostata su un nuovo TextWriter da mstest e questo non veniva impostato nel mio nuovo dominio dell'app.

Così ho creato un metodo SetConsoleOut sulla classe che ho creato nel nuovo appdomain e lo passo Console.Out.

TestFramework testFramework = 
      (TestFramework)newAppDomain.CreateInstanceAndUnwrap(
               "TestFrameworkLibrary", 
               "MyNamespace.TestFramework"); 

testFramework.SetConsoleOut(Console.Out); 

E in TestFramework ho aggiunto il metodo

internal void SetConsoleOut(TextWriter consoleOut) 
{ 
    Console.SetOut(consoleOut); 
} 

funziona come un fascino. Non sono sicuro dell'etichetta qui. Devo cancellare la domanda o aggiungere la risposta alla domanda?

Problemi correlati