2012-01-29 10 views
5

Tengo un problema extraño con las pruebas unitarias en Visual Studio 2010. Tengo una prueba que pasa cuando uso "Prueba de depuración" (sin ningún punto de interrupción), pero falla cuando uso "Ejecutar prueba". Esta prueba utiliza dll externos, por lo que no puedo depurarla correctamente.Pruebas unitarias en VS2010 - Pases de "depuración", "Ejecutar" falla

¿Conoces alguna razón por la cual una situación como esta es posible? ¿Por qué "Prueba de depuración" es diferente a "Prueba de ejecución", cuando todos los demás parámetros son iguales?

+2

¿Tiene alguna ' CondtionalAttribute' en su base de código que solo se ejecuta para la depuración? Cualquier sección '#if Debug'? En las bibliotecas de terceros, es muy posible que hagan las cosas de manera diferente en los modos de depuración frente a versión. – Oded

+0

Agregando a la pregunta de Oded, ¿hay algún código específico que sea específico de tiempo? Cualquier parte del código que pueda necesitar un retraso pasará cuando esté depurando pero fallará en el flujo normal. –

+0

¿Ha comprobado la ventana de resultados de la prueba y ve qué error está recibiendo allí? –

Respuesta

2

Puede haber varias razones, pero para precisar una, tendrá que darnos algún código para trabajar.

Podría ser código de exclusión:

#ifdef _DEBUG 
//do something 
#endif 

Esto sólo se ejecutará en modo de depuración.

Podría ser optimizaciones. Aunque normalmente no deberían afectar el comportamiento, no debe confiar en los destructores ni en copiar los constructores a los que se llama.

Si está hackeando dentro del código, también podría ser válido para la depuración.

1

Sospecho que está accediendo a la memoria fuera de los límites. Una diferencia importante entre la depuración y la versión es que la depuración agrega kits de relleno y marcadores especiales a las asignaciones de memoria para detectar ciertos tipos de errores. Esto significa que los diseños de memoria a menudo son muy diferentes entre versiones de depuración y versión. Sospecho que está accediendo a la memoria fuera de los límites de una manera que el depurador no está detectando, donde se encuentra un valor accidentalmente válido en la versión de depuración, pero uno inválido en la versión de lanzamiento.

3

interruptor que a modo de solución en lugar de depuración lanzamiento, ejecuta una generación completa, cambia de nuevo a depurar y vuelva a intentar y quiero saber el resultado, creo que las pruebas pasarán ....

+0

Esto resolvió mi problema. ¡Gracias! – gstar

Cuestiones relacionadas