Ich habe ein Testprojekt in Visual Studio. Ich verwende Microsoft.VisualStudio.TestTools.UnitTesting.
Ich füge diese Zeile in einem meiner Unit-Tests hinzu:
Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();
Wenn ich den Test ausführe, besteht der Test, aber das Konsolenfenster wird überhaupt nicht geöffnet.
Gibt es eine Möglichkeit, das Konsolenfenster für die Interaktion über einen Komponententest verfügbar zu machen?
c#
.net
visual-studio
unit-testing
console-application
Bleistiftkuchen
quelle
quelle
Dump
Erweiterungsmethode, die den Inhalt des Objekts in die Konsole ausgibt, was das Debuggen erheblich erleichtert. i.imgur.com/MEZwy7X.pngAntworten:
HINWEIS: Die ursprüngliche Antwort unten sollte für jede Version von VS bis VS2012 funktionieren. VS2013 scheint kein Testergebnisfenster mehr zu haben. Wenn Sie eine testspezifische Ausgabe benötigen, können Sie stattdessen den Vorschlag von @ Stretch verwenden
Trace.Write()
, um die Ausgabe in das Ausgabefenster zu schreiben.Die
Console.Write
Methode schreibt nicht in die "Konsole", sondern in alles, was mit dem Standardausgabehandle für den laufenden Prozess verbunden ist.Console.Read
Liest in ähnlicher Weise Eingaben von allem, was mit der Standardeingabe verbunden ist.Wenn Sie einen Komponententest über VS2010 ausführen, wird die Standardausgabe vom Testkabelbaum umgeleitet und als Teil der Testausgabe gespeichert. Sie können dies sehen, indem Sie mit der rechten Maustaste auf das Fenster Testergebnisse klicken und der Anzeige die Spalte "Ausgabe (StdOut)" hinzufügen. Dies zeigt alles, was in stdout geschrieben wurde.
Sie können ein Konsolenfenster manuell öffnen, indem Sie P / Invoke verwenden, wie @ sinni800 sagt. Nach dem Lesen der
AllocConsole
Dokumentation wird die Funktion zurückgesetztstdin
undstdout
behandelt, um auf das neue Konsolenfenster zu verweisen. (Da bin ich mir nicht 100% sicher. Es scheint mir irgendwie falsch zu sein, wenn ichstdout
Windows bereits umgeleitet habe , um es mir zu stehlen, aber ich habe es nicht versucht.)Im Allgemeinen halte ich es jedoch für eine schlechte Idee; Wenn Sie die Konsole nur verwenden möchten, um weitere Informationen zu Ihrem Komponententest zu speichern, ist die Ausgabe für Sie da. Verwenden
Console.WriteLine
Sie weiterhin so, wie Sie sind, und überprüfen Sie die Ausgabeergebnisse im Fenster Testergebnisse, wenn dies erledigt ist.quelle
AllocConsole
Dokumentation bin ich möglicherweise falsch, aber ich muss sie testen.Jemand hat diese anscheinend neue Funktionalität in VS2013 kommentiert. Ich war mir zunächst nicht sicher, was er meinte, aber jetzt, wo ich es tue, denke ich, dass es eine eigene Antwort verdient.
Wir können Console.WriteLine normal verwenden und die Ausgabe wird angezeigt, nur nicht im Ausgabefenster, sondern in einem neuen Fenster, nachdem wir in den Testdetails auf "Ausgabe" geklickt haben.
quelle
Mit dieser Zeile können Sie in das Ausgabefenster von Visual Studio schreiben :
Muss im Debug-Modus ausgeführt werden.
quelle
Wie bereits erwähnt, sind Unit-Tests so konzipiert, dass sie ohne Interaktion ausgeführt werden können.
Sie können Unit-Tests jedoch wie jeden anderen Code debuggen. Am einfachsten ist es, die Schaltfläche Debuggen auf der Registerkarte Testergebnisse zu verwenden.
Debuggen bedeutet, Haltepunkte verwenden zu können. Haltepunkte verwenden zu können bedeutet also, Tracepoints verwenden zu können , was ich beim täglichen Debuggen äußerst nützlich finde.
Mit Tracepoints können Sie im Wesentlichen in das Ausgabefenster (oder genauer in die Standardausgabe) schreiben. Optional können Sie die Ausführung fortsetzen oder wie ein normaler Haltepunkt anhalten. Auf diese Weise erhalten Sie die gewünschte "Funktionalität", ohne dass Sie Ihren Code neu erstellen oder mit Debug-Informationen füllen müssen.
Fügen Sie einfach einen Haltepunkt hinzu und klicken Sie mit der rechten Maustaste auf diesen Haltepunkt. Wählen Sie die Option "Wenn getroffen ...":
Was den Dialog aufruft:
Ein paar Dinge zu beachten:
Weitere Informationen finden Sie in der Dokumentation.
quelle
Es gibt verschiedene Möglichkeiten, die Ausgabe eines Visual Studio-Komponententests in C # zu schreiben:
Bestätigt in Visual Studio 2013 Professional.
quelle
Sie können verwenden
beim Debuggen eines Unittest in das Ausgabefenster schreiben.
quelle
In Visual Studio 2017 zeigt "TestContext" keinen Ausgabe-Link im Test Explorer an. Trace.Writeline () zeigt jedoch den Ouput-Link.
quelle
Zunächst alle Unit - Tests sind, durch Design , soll ganz ohne Interaktion laufen.
Abgesehen davon glaube ich nicht, dass es eine Möglichkeit gibt, an die gedacht wurde.
Sie können versuchen, mit AllocConsole P / Invoke zu hacken, wodurch eine Konsole geöffnet wird, auch wenn Ihre aktuelle Anwendung eine GUI-Anwendung ist. Die
Console
Klasse wird dann auf der jetzt geöffneten Konsole posten.quelle
Debug.WriteLine () kann ebenfalls verwendet werden.
quelle
IMHO-Ausgabemeldungen sind in den meisten Fällen nur für den Fall eines fehlgeschlagenen Tests relevant. Ich habe das folgende Format zusammengestellt, Sie können auch Ihr eigenes erstellen. Dies wird im VS Test Explorer-Fenster selbst angezeigt.
Wie wird diese Nachricht in das VS Test Explorer-Fenster geworfen? Ein Beispielcode wie dieser sollte funktionieren.
Sie können eine separate Klasse für Sie haben. Ich hoffe es hilft!
quelle
Ich habe eine einfachere Lösung (die ich kürzlich aus einer Vielzahl von faulen Gründen selbst verwendet habe). Fügen Sie diese Methode der Klasse hinzu, in der Sie arbeiten:
Dann ... öffnen Sie das Verzeichnis AdHocConsole, sortieren Sie nach Erstellungszeit. Stellen Sie sicher, dass Ihre "Druckanweisungen" unterschiedlich sind, da sie sonst unterschiedlich sind.
quelle
Visual Studio für Mac
Keine der anderen Lösungen funktionierte unter VS für Mac
Wenn Sie NUnit verwenden , können Sie Ihrer Lösung ein kleines
.NET
Konsolenprojekt hinzufügen und dann in den Referenzen dieses neuen Konsolenprojekts auf das Projekt verweisen, das Sie testen möchten .Was auch immer Sie in Ihren
[Test()]
Methoden getan haben, können Sie inMain
der Konsolen-App auf folgende Weise tun :Unter diesen Umständen können Sie
Console.Write
undConsole.WriteLine
in Ihrem Code frei verwenden .quelle