Come scrivere l’output da un test unitario?

Qualsiasi chiamata nella mia unit test su Debug.Write(line) o Console.Write(Line) viene semplicemente ignorata durante il debug e l’output non viene mai stampato. Le chiamate a queste funzioni dalle classi che sto usando funzionano bene.

Comprendo che il test delle unità deve essere automatizzato, ma mi piacerebbe comunque poter inviare messaggi da un test unitario.

Prova a utilizzare TestContext.WriteLine() che emette il testo nei risultati del test.

Esempio:

  [TestClass] public class UnitTest1 { private TestContext testContextInstance; ///  /// Gets or sets the test context which provides /// information about and functionality for the current test run. /// public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } [TestMethod] public void TestMethod1() { TestContext.WriteLine("Message..."); } } 

La “magia” è descritta in MSDN come “Il framework di test imposta automaticamente la proprietà, che è quindi ansible utilizzare nei test unitari”.

È un po ‘tardi per la conversazione.

Stavo anche cercando di far funzionare Debug o Trace o Console o TestContext in Unit Testing.

Nessuno di questi metodi sarebbe apparso in output o in output nella finestra di output.

  Trace.WriteLine("test trace"); Debug.WriteLine("test debug"); TestContext.WriteLine("test context"); Console.WriteLine("test console"); 

VS2012 e maggiore
(dai commenti) In Visual Studio 2012, non c’è un’icona. Invece, c’è un link nei risultati del test chiamato Output . Se fai clic sul link, vedi tutto il WriteLine .

Prima di VS2012
Ho quindi notato nella finestra Risultati del test , dopo aver eseguito il test, accanto al piccolo cerchio verde di successo , c’è un’altra icona, ho fatto doppio clic su di esso. Erano i risultati dei miei test e includevano tutti i tipi di scrittura sopra riportati.

In Visual Studio 2017 è ansible visualizzare l’output di Esplora risorse.

1) Nel tuo metodo di prova, Console.WriteLine (“qualcosa”);

2) Esegui il test.

3) Nella finestra Test Explorer, fare clic sul metodo di test superato.

4) E clicca sul link “Output”.

inserisci la descrizione dell'immagine qui

E fai clic su “Output”, puoi vedere il risultato di Console.Writeline (). inserisci la descrizione dell'immagine qui

Dipende dal tuo runner di test … per esempio, sto usando XUnit, quindi nel caso in cui sia quello che stai usando, segui queste istruzioni:

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

Questo metodo raggruppa l’output con ciascun test di unità specifico.

 usando Xunit;
 usando Xunit.Abstractions;

 class pubblica MyTestClass
 {
     output privato di sola lettura ITestOutputHelper;

     public MyTestClass (output ITestOutputHelper)
     {
         this.output = output;
     }

     [Fatto]
     public void MyTest ()
     {
         var temp = "mia class!";
         output.WriteLine ("Questo viene emesso da {0}", temp);
     }
 }

C’è un altro metodo elencato nel link che ho fornito per scrivere nella finestra Output, ma preferisco il precedente.

Penso che sia ancora attuale.

Puoi utilizzare questo pacchetto NuGet: https://www.nuget.org/packages/Bitoxygen.Testing.Pane/

Chiama il metodo WriteLine personalizzato da questa libreria.
Crea riquadro di test all’interno della finestra di output e inserisce i messaggi sempre (durante ogni test eseguito indipendentemente dai flag DEBUG e TRACE).

Per rendere più facile la traccia, posso consigliarti di creare una class base:

 [TestClass] public abstract class BaseTest { #region Properties public TestContext TestContext { get; set; } public string Class { get { return this.TestContext.FullyQualifiedTestClassName; } } public string Method { get { return this.TestContext.TestName; } } #endregion #region Methods protected virtual void Trace(string message) { System.Diagnostics.Trace.WriteLine(message); Output.Testing.Trace.WriteLine(message); } #endregion } [TestClass] public class SomeTest : BaseTest { [TestMethod] public void SomeTest1() { this.Trace(string.Format("Yeah: {0} and {1}", this.Class, this.Method)); } } 

Prova a usare:

Console.WriteLine()

La chiamata a Debug.WriteLine verrà eseguita solo durante la definizione di DEBUG.

Altri suggerimenti sono da utilizzare: Trace.WriteLine , ma non l’ho provato.

C’è anche un’opzione (non è sicuro che VS2008 ce l’abbia) ma puoi ancora usare Debug.WriteLine quando esegui il test con l’opzione Test With Debugger nell’IDE

Sei sicuro di eseguire i tuoi test unitari in Debug? Debug.WriteLine non verrà inserito nelle versioni di Release.

Due opzioni da provare sono:

  • Trace.WriteLine (), che è costruito sia in build di rilascio sia come debug

  • Elimina DEBUG nelle impostazioni di costruzione per il test dell’unità

Non ottengo output quando le impostazioni Test / Impostazioni test / Architettura processore predefinita e gli assembly che i miei riferimenti al progetto di test non sono uguali. Altrimenti Trace.Writeline () funziona correttamente.

Sto usando xunit quindi questo è quello che uso: Debugger.Log(0, "1", input);

PS: puoi usare Debugger.Break(); così puoi vederti accedere

Trace.WriteLine dovrebbe funzionare se si seleziona l’output corretto (il menu a discesa etichettato con “Mostra output da” trovato nella finestra Output)

Risolto con il seguente esempio:

 public void CheckConsoleOutput() { Console.WriteLine("Hi Hi World"); Trace.WriteLine("Trace Trace the World"); Debug.WriteLine("Debug Debug WOrld"); Assert.IsTrue(true); } 

Dopo aver eseguito questo test, sotto “Test superato”, è ansible visualizzare l’output, che farà apparire la finestra di output.