J'ai un projet de test dans Visual Studio. J'utilise Microsoft.VisualStudio.TestTools.UnitTesting .
J'ajoute cette ligne dans l'un de mes tests unitaires:
Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();
Lorsque j'exécute le test, le test réussit, mais la fenêtre de la console ne s'ouvre pas du tout.
Existe-t-il un moyen de rendre la fenêtre de la console disponible pour interagir via un test unitaire?
c#
.net
visual-studio
unit-testing
console-application
crayonGâteau
la source
la source
Dump
méthode d'extension qui génère le contenu de l'objet dans la console, ce qui facilite grandement le débogage. i.imgur.com/MEZwy7X.pngRéponses:
REMARQUE: la réponse d'origine ci-dessous doit fonctionner pour n'importe quelle version de Visual Studio jusqu'à Visual Studio 2012. Visual Studio 2013 ne semble plus avoir de fenêtre Résultats de test. Au lieu de cela, si vous avez besoin d'une sortie spécifique au test, vous pouvez utiliser la suggestion de @ Stretch
Trace.Write()
pour écrire la sortie dans la fenêtre Sortie.La
Console.Write
méthode n'écrit pas dans la "console" - elle écrit sur tout ce qui est connecté au descripteur de sortie standard pour le processus en cours. De même,Console.Read
lit l'entrée à partir de tout ce qui est connecté à l'entrée standard.Lorsque vous exécutez un test unitaire via Visual Studio 2010, la sortie standard est redirigée par le faisceau de test et stockée dans le cadre de la sortie de test. Vous pouvez le voir en cliquant avec le bouton droit de la souris sur la fenêtre Résultats du test et en ajoutant la colonne nommée "Output (StdOut)" à l'affichage. Cela montrera tout ce qui a été écrit sur la sortie standard.
Vous pouvez ouvrir manuellement une fenêtre de console, en utilisant P / Invoke comme le dit sinni800 . À la lecture de la
AllocConsole
documentation, il semble que la fonction se réinitialisestdin
etstdout
gère pour pointer vers la nouvelle fenêtre de console. (Je ne suis pas sûr à 100% à ce sujet; cela me semble un peu faux si j'ai déjà redirigéstdout
pour que Windows me le vole, mais je n'ai pas essayé.)En général, cependant, je pense que c'est une mauvaise idée; si vous ne souhaitez utiliser la console que pour vider plus d'informations sur votre test unitaire, la sortie est là pour vous. Continuez à utiliser
Console.WriteLine
la façon dont vous êtes et vérifiez les résultats de sortie dans la fenêtre Résultats du test lorsque vous avez terminé.la source
AllocConsole
documentation, je me trompe peut-être, mais je devrais la tester.Quelqu'un a commenté cette fonctionnalité apparemment nouvelle dans Visual Studio 2013. Je n'étais pas sûr de ce qu'il voulait dire au début, mais maintenant que je le fais, je pense qu'elle mérite sa propre réponse.
Nous pouvons utiliser Console.WriteLine normalement et la sortie est affichée, mais pas dans la fenêtre Sortie, mais dans une nouvelle fenêtre après avoir cliqué sur "Sortie" dans les détails du test.
la source
Vous pouvez utiliser cette ligne pour écrire dans la fenêtre de sortie de Visual Studio:
Doit s'exécuter en mode débogage.
la source
Comme indiqué, les tests unitaires sont conçus pour s'exécuter sans interaction.
Cependant, vous pouvez déboguer des tests unitaires, comme tout autre code. Le moyen le plus simple consiste à utiliser le Debugbouton dans l'onglet Résultats du test.
Être capable de déboguer signifie être capable d'utiliser des points d'arrêt. Pouvoir utiliser des points d'arrêt signifie donc pouvoir utiliser des points de trace , ce que je trouve extrêmement utile dans le débogage quotidien.
Essentiellement, les Tracepoints vous permettent d'écrire dans la fenêtre Sortie (ou, plus précisément, sur la sortie standard). Vous pouvez éventuellement continuer à exécuter ou vous pouvez vous arrêter comme un point d'arrêt normal. Cela vous donne la "fonctionnalité" que vous demandez, sans avoir besoin de reconstruire votre code ou de le remplir avec des informations de débogage.
Ajoutez simplement un point d'arrêt, puis cliquez avec le bouton droit sur ce point d'arrêt. Sélectionnez l'option "Quand vous êtes touché ...":
Ce qui fait apparaître la boîte de dialogue:
Quelques points à noter:
Consultez la documentation pour plus de détails.
la source
Il existe plusieurs façons d'écrire la sortie d'un test unitaire Visual Studio en C #:
Confirmé dans Visual Studio 2013 Professional.
la source
Vous pouvez utiliser
pour écrire dans la fenêtre Sortie lors du débogage d'un test unitaire.
la source
Dans Visual Studio 2017, «TestContext» n'affiche pas le lien de sortie dans l'Explorateur de tests.
Cependant, Trace.Writeline () affiche le lien de sortie.
la source
Tout d'abord, les tests unitaires sont, de par leur conception , censés s'exécuter complètement sans interaction.
Cela dit, je ne pense pas qu'il y ait une possibilité qui a été envisagée.
Vous pouvez essayer le piratage avec AllocConsole P / Invoke qui ouvrira une console même lorsque votre application actuelle est une application GUI. La
Console
classe publiera ensuite sur la console maintenant ouverte.la source
Debug.WriteLine () peut également être utilisé.
la source
À mon humble avis, les messages de sortie ne sont pertinents que pour les cas de test ayant échoué dans la plupart des cas. J'ai créé le format ci-dessous et vous pouvez également créer le vôtre. Cela s'affiche dans la fenêtre de l'Explorateur de tests Visual Studio elle-même.
Comment pouvons-nous lancer ce message dans la fenêtre de l'Explorateur de tests de Visual Studio?
Un exemple de code comme celui-ci devrait fonctionner:
Vous pouvez avoir une classe distincte dédiée à cela pour vous.
la source
J'ai une solution plus simple (que j'ai moi-même utilisée récemment, pour une foule de raisons paresseuses). Ajoutez cette méthode à la classe dans laquelle vous travaillez:
Ensuite ... ouvrez le répertoire AdHocConsole, et triez par heure de création. Assurez-vous que lorsque vous ajoutez vos «déclarations d'impression». Ils sont cependant distincts, sinon il y aura de la jonglerie.
la source
Visual Studio pour Mac
Aucune des autres solutions ne fonctionnait sur Visual Studio pour Mac
Si vous utilisez NUnit , vous pouvez ajouter un petit
.NET
projet de console à votre solution, puis référencer le projet que vous souhaitez tester dans les références de ce nouveau projet de console. .Tout ce que vous faisiez dans vos
[Test()]
méthodes peut être fait dans l'Main
application console de cette manière:Vous êtes libre d'utiliser
Console.Write
etConsole.WriteLine
dans votre code dans ces circonstances.la source