2010-11-11 13 views
5

Escribí el programa en C# que invoca MSTest desde la línea de comandos. Uno de los casos de prueba arroja StackOverflowException y causa que el proceso QtAgent32 (y mi aplicación) se rompa. ¿Qué puedo hacer para evitar esta situación (no puedo cambiar las pruebas de unidad)?MSTest - prueba de unidad con StackOverflowException

+0

¿Puedes compartir tu código C#? Idealmente, el mismo cuadro de diálogo debería aparecer también desde el código C# y me pregunto si tiene algo que ver con los parámetros de startInfo del proceso. –

Respuesta

3

Una forma de evitar este tipo de bloqueos es establecer la propiedad legacyUnhandledExceptionPolicy en QTAgent32.exe.config (y/o QTAgent.exe.config dependiendo de la bitness de la máquina/testrun) como se menciona here. El texto relevante de este enlace es: -

Como medida de compatibilidad temporal, los administradores pueden colocar un marcador de compatibilidad en la sección del archivo de configuración de la aplicación. Esto hace que el tiempo de ejecución del lenguaje común vuelva al comportamiento de las versiones 1.0 y 1.1.

Esto cambiará la "excepción no controlada" manipulará a .NET 1.1 y el proceso no se colgará en tales excepciones.

+0

Gracias por su respuesta. Yo fui muy útil. – mirt

2

El problema es que no se puede capturar StackOverflowException en .NET (comenzando con la versión 2.0). Esto probablemente significa que no hay forma de resolver el problema que tiene, porque el marco de prueba de la unidad simplemente no puede detectar la excepción.

Véase la siguiente información, relacionada SO pregunta:

Hay algunas sugerencias interesantes sobre el otro hilo - por ejemplo, puede crear Thread y comprobar la corriente FrameCount para detectar el desbordamiento de pila antes. Sin embargo, eso probablemente no será muy confiable. Por lo tanto, me temo que no hay una buena respuesta ...

+0

OK, pero cuando invoco MSTest desde la línea de comandos (no desde el código C#), cuando esta prueba de unidad se está ejecutando puedo simplemente hacer clic en cancelar en el cuadro de mensaje de error y MSTest continuará ejecutándose. No sé cómo hacer algo como esto, pero en el código de C# – mirt

+0

@mirt, ¿puedes agregar esa información adicional a la pregunta original? Esos son buenos detalles. –

Cuestiones relacionadas