Comment puis-je voir les instructions Debug.WriteLine lorsque j'utilise TestDriven.Net?
-
05-07-2019 - |
Question
J'essaie d'utiliser TestDriven.Net non seulement pour tester mon code, mais pour appeler une fonction sur mon code dont le but est d'imprimer l'état interne du code dans la fenêtre de débogage.
Voici un exemple très simplifié de ce que j'essaie de faire.
<TestFixture()> _
Public Class UnitTest
<Test()> _
Public Sub TestDebug()
Dim oClass1 As New Class1
Assert.AreEqual(True, oClass1.IsTrue)
Debug.WriteLine("About to call .PrintDebug()")
oClass1.PrintToDebug()
End Sub
End Class
Public Class Class1
Private _IsTrue As Boolean = True
Public ReadOnly Property IsTrue() As Boolean
Get
Return _IsTrue
End Get
End Property
Public Sub PrintToDebug()
Debug.WriteLine("Internal state of Class1: " & _IsTrue)
End Sub
End Class
J'essaie de tester l'interface publique de Class1 et d'afficher en quelque sorte le résultat de la fonction Class1.PrintToDebug ()
.
J'ai consulté le quickstart de TestDriven.Net , qui présente des exemples d'utilisation du Debug.WriteLine
dans un test unitaire, mais étrangement, cela ne fonctionne pas pour moi non plus - c'est-à-dire que la seule sortie dans ma fenêtre "Test" est:
------ Test started: Assembly: ClassLibrary1.dll ------
1 passed, 0 failed, 0 skipped, took 1.19 seconds.
J'ai essayé de regarder dans les autres fenêtres (Debug et Build), les options "Sortie du programme" et "Messages d'exception" sont activées dans la fenêtre Débogage.
J'ai cherché des options ou des préférences et n'en ai trouvé aucune!
Merci pour votre aide!
Modifier: j'utilise VB.Net 2.0, TestDriven.Net 2.14.2190 et NUnit 2.4.8.0
La solution
J'ai constaté que, bien que Debug.Writeline () ne fonctionne pas avec les tests unitaires, Console.WriteLine () le fait.
La raison en est que lorsque vous exécutez des tests, le processus de débogage n’est pas appelé et Debug.WriteLine () est ignoré. Cependant, si vous utilisez "Test avec le débogueur", je pense que (je n’ai pas essayé) Debug.WriteLine () fonctionnera.
Autres conseils
Trace.WriteLine ()
semble être la réponse: o)
Voici le résultat de l'exemple de ma question, en utilisant Trace
au lieu de Debug
:
------ Test started: Assembly: ClassLibrary1.dll ------
Internal state of Class1: True
1 passed, 0 failed, 0 skipped, took 0.61 seconds.
Une chose que j'ai trouvée cependant .. l'exécution est arrêtée lors de la première assertion de test d'unité défaillante, ce qui signifie que les instructions Trace
ne sont pas exécutées si un Assert ()
au-dessus d’eux échoue.
Essayez d’utiliser plutôt Trace.WriteLine (...). L'appel à Debug.WriteLine (...) ne sera effectué que lorsque DEBUG est défini. Par défaut, les nouveaux projets Visual Studio ne définissent plus DEBUG, mais TRACE.
Je devrais vraiment changer l'exemple de démarrage rapide pour utiliser Trace à la place.
Cordialement, Jamie.
Vous voudrez peut-être savoir que la version 2.16 (la version bêta actuelle) inclut:
1587: Toujours afficher la console messages de sortie / d'erreur et de testeur
Tester les messages générés par le coureur et la sortie de la console sera maintenant affichée lors de l'exécution de tous les tests dans un projet / solution.
1588: éventuellement afficher trace / débogage sortie lors de l'exécution de tous les tests dans projet / solution
Par défaut, la sortie trace / debug n'est pas affiché lors de l'exécution de tous les tests un projet / solution. Ce comportement peut être modifié via le TesDriven.Net volet des options.
Il semble donc que cela fonctionnera dans la prochaine version.
IIRC, cette sortie est uniquement affichée dans la fenêtre de sortie lors de l'exécution d'un test individuel. Essayez de cliquer avec le bouton droit de la souris sur la méthode de test pour exécuter uniquement ce test ...?
" Exécuter les tests ... " récupère le paramètre que vous avez actuellement pour construire votre solution / projet.
Vous devez vous assurer que les paramètres de construction actuels de votre solution / projet sont définis sur " Debug " et ne pas "valider" (sinon, les appels Debug.Write * () sont conditionnellement supprimé par le compilateur).
CTRL + ALT + I vous montre la fenêtre immédiate