Acquisizione dell’output inviato a Console.Out dall’interno di un test di unità?

Sto costruendo un test unitario in C # con NUnit, e vorrei testare che il programma principale in effetti emetta l’output corretto in base agli argomenti della riga di comando.

C’è un modo da un metodo di test NUnit, che chiama Program.Main(...) per afferrare tutto ciò che è scritto su Console.Out e Console.Error in modo da poterlo verificare?

    È ansible redirect Console In, Out ed Error a stringWriter personalizzati, come questo

     [TestMethod] public void ValidateConsoleOutput() { using (StringWriter sw = new StringWriter()) { Console.SetOut(sw); ConsoleUser cu = new ConsoleUser(); cu.DoWork(); string expected = string.Format("Ploeh{0}", Environment.NewLine); Assert.AreEqual(expected, sw.ToString()); } } 

    Vedi questo post sul blog per tutti i dettagli.

    È ansible utilizzare questa semplice class per ottenere l’output con un’istruzione using:

     public class ConsoleOutput : IDisposable { private StringWriter stringWriter; private TextWriter originalOutput; public ConsoleOutput() { stringWriter = new StringWriter(); originalOutput = Console.Out; Console.SetOut(stringWriter); } public string GetOuput() { return stringWriter.ToString(); } public void Dispose() { Console.SetOut(originalOutput); stringWriter.Dispose(); } } 

    Ecco un esempio su come usarlo:

     using (var consoleOutput = new ConsoleOutput()) { target.WriteToConsole(text); Assert.AreEqual(text, consoleOutput.GetOuput()); } 

    puoi trovare informazioni più dettagliate e un esempio di codice funzionante sul mio post del blog qui – Ottenere l’output della console all’interno di un test unitario .