¿Cómo veo las declaraciones Debug.WriteLine cuando uso TestDriven.Net?
-
05-07-2019 - |
Pregunta
Estoy tratando de usar TestDriven.Net no solo para probar mi código, sino para llamar a una función de mi código cuyo propósito es imprimir el estado interno del código en la ventana de depuración.
Aquí hay un ejemplo muy simplificado de lo que estoy tratando de hacer ...
<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
Estoy intentando probar la interfaz pública de Class1 y, de alguna manera, ver el resultado de la función Class1.PrintToDebug ()
.
He revisado el TestDriven.Net quickstart , que muestra ejemplos de cómo usar el Debug.WriteLine
en una prueba de unidad, pero extrañamente esto tampoco funciona para mí, es decir, la única Salida en mi ventana 'Prueba' es:
------ Test started: Assembly: ClassLibrary1.dll ------
1 passed, 0 failed, 0 skipped, took 1.19 seconds.
He intentado buscar en las otras ventanas (depurar y compilar), la ventana de depuración tiene habilitadas las opciones "Salida del programa" y "Mensajes de excepción".
He buscado opciones o preferencias y no puedo encontrar ninguna.
¡Gracias por tu ayuda!
Editar: Estoy usando VB.Net 2.0, TestDriven.Net 2.14.2190 y NUnit 2.4.8.0
Solución
Encontré que mientras Debug.Writeline () no funciona con pruebas unitarias, Console.WriteLine () sí lo hace.
El motivo es que cuando se ejecutan pruebas, el proceso del depurador no se invoca y Debug.WriteLine () se ignora. Sin embargo, si usas "Test with Debugger", creo que (no lo he intentado) Debug.WriteLine () funcionará.
Otros consejos
Trace.WriteLine()
parece ser la respuesta: o)
Aquí está el resultado para el ejemplo de mi pregunta, utilizando Trace
en lugar de Debug
:
------ Test started: Assembly: ClassLibrary1.dll ------
Internal state of Class1: True
1 passed, 0 failed, 0 skipped, took 0.61 seconds.
Sin embargo, una cosa que he encontrado ... la ejecución se detiene en la primera afirmación de prueba de unidad que falla, lo que significa que las declaraciones de Trace
no se ejecutan si un Assert ()
por encima de ellos falla. Intente usar Trace.WriteLine (...) en su lugar. La llamada a Debug.WriteLine (...) solo se realizará cuando se defina DEBUG. Por defecto, los nuevos proyectos de Visual Studio ya no definen DEBUG, pero sí definen TRACE.
Realmente debería cambiar el ejemplo de inicio rápido para usar Trace en su lugar.
Saludos, Jamie.
Es posible que desee saber que la versión 2.16 (la versión beta actual) incluye:
1587: mostrar siempre la consola Mensajes de salida / error y corredor de prueba
Los mensajes generados por el corredor de prueba y Ahora se mostrará la salida de la consola cuando se ejecutan todas las pruebas en una proyecto / solución.
1588: opcionalmente mostrar seguimiento / depuración salida al ejecutar todas las pruebas en proyecto / solución
Por defecto, la salida de seguimiento / depuración no es se muestra al ejecutar todas las pruebas en Un proyecto / solución. Este comportamiento puede ser modificado a través de la TesDriven.Net panel de opciones.
Parece que funcionará en la próxima versión.
IIRC, esta salida solo se muestra en la ventana de salida cuando se ejecuta una prueba individual. Intente hacer clic derecho en el método de prueba para ejecutar solo esa prueba ...
" Ejecutar pruebas ... " recoge cualquier configuración que tenga actualmente para construir su solución / proyecto.
Debe asegurarse de que la configuración de compilación actual para su solución / proyecto esté establecida en " Depurar " y no a " Liberar " (de lo contrario, las llamadas Debug.Write * () son condicionalmente eliminado por el compilador).
CTRL + ALT + I te muestra la ventana inmediata