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”.
E fai clic su “Output”, puoi vedere il risultato di Console.Writeline ().
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.