2009-09-28 13 views
21

Cuando intento depurar una prueba unitaria que falla debido a una excepción no controlada en mi código, espero que Visual Studio rompa la excepción no controlada para poder inspeccionar el código y aislar el problema. En cambio, el IDE sale inmediatamente del modo de depuración y la prueba aparece como "Falló", dejándome consultar el seguimiento de la pila del resultado de la prueba para encontrar el problema.¿Por qué Visual Studio no se salta las excepciones cuando se depuran las pruebas unitarias?

He confirmado que el IDE está configurado para romperse cuando se produce una excepción de CLR no controlada por el usuario. Solo puedo obtener el comportamiento esperado si configuro el IDE para romper todas las excepciones lanzadas. Esto, por supuesto, hace que la depuración normal sea un PITA.

¿No tengo suerte?

Respuesta

23

El motivo es que sus excepciones no se han dejado de gestionar. El marco de prueba de unidades maneja las excepciones bajo el capó y las convierte en fallas.

Lo que debe hacer en su lugar es romper las excepciones lanzadas. Si combina esto con habilitar "Just My Code" (activado de manera predeterminada), debe obtener el comportamiento que espera. Visual Studio solo se romperá cuando ocurran excepciones lanzadas por su código.

+1

Esta es una solución aceptable por ahora, pero más adelante cuando mi código madure y se lanzan excepciones legítimas con más frecuencia, se convertirá en un PITA. Gemido. –

+2

Entiendo por qué, no comprendo la solución; en términos gruesos, ¿en qué hago clic? Para mí, incluso "Pruebas de depuración" no llega a los puntos de interrupción. –

+2

@Luke Puplett: Aparentemente, menú "Depurar" -> "Excepciones ..." -> Marque "arrojado" para conocer las excepciones relevantes. – FunctorSalad

1

El marco de prueba de la unidad maneja la excepción, por lo que visual Studio cree que se trata de la excepción.

-1

Esto se debe a que las pruebas se ejecutan utilizando MSTest (con Visual Studio utilizado simplemente como un shell). MSTest enmascarará estas excepciones que se lanzan y que nunca llegarán a Visual Studio. Si ejecuta las pruebas en modo de depuración debería funcionar.

Si hace clic con el botón derecho en la (s) prueba (s) en la Vista de prueba y elige depurarlas, debería ejecutar el código a través del IDE y las excepciones deberían romperse adecuadamente.

alt text http://i36.tinypic.com/fwowaf.jpg

+2

Eso no funciona a menos que configuro el depurador para romper con todas las excepciones * throwwn * (en lugar de no manejadas por el usuario), que es lo que quería evitar. –

+0

El OP ya declaró que están haciendo esto. – binki

0

Por defecto, incluso si lo hace una versión de depuración, MSTest does't darle la depuración (con puntos de quiebre, etc.), a menos que realmente se dice explícitamente a "pruebas unitarias de depuración".

Se debe romper en las excepciones no controladas en las pruebas de unidad, siempre y cuando esté en una configuración de depuración, y se inicia el uso de pruebas unitarias "depuración" - es decir: Usando Ctrl+R, Ctrl+ACtrl+R, A en lugar de ejecutar todas las pruebas. En la ventana de prueba, hay un menú "Ejecutar" y un menú "Depurar" con las opciones.

+1

Probé explícitamente "Pruebas de unidad de depuración" usando CTRL + R, CTRL + A o CTRL + R, CTRL + T. De nuevo, este enfoque solo funciona si el depurador está configurado para interrumpir todas las excepciones * throwwn * (en lugar de no manejadas por el usuario), que es lo que quería evitar. –

7

Para mí, vaya a: Herramientas, Opciones, Depuración, General: debe asegurarse de que se deben marcar "Habilitar solo mi código" y "Activar el asistente de excepción".

0

Esto hizo el truco para mí:
Ctrl + Alt + E para el menú Excepciones -> Prensa Reset All
Ir a: Herramientas -> Opciones -> Depuración -> General: hay que asegurarse de que tanto "Habilitar Justo Mi código "y" Habilitar el asistente de excepción "están marcados.

Cuestiones relacionadas