2011-06-16 19 views
9

Estoy usando NUnit para pruebas unitarias (corriendo con TD.NET).Assert.DoesNotThrow con NUnit: cómo obtener el seguimiento de pila?

Cuando uso Assert.DoesNotThrow, obtengo la excepción, pero sin ningún rastro de pila, lo que hace que sea más difícil identificar el problema de raíz.

¿Cómo puedo abordar esto?

+0

Solo para información: Tanto la prueba unitaria Resharper como la prueba unitaria de Visual Studio (utilizando VSTest y NUNit3Adapter) muestran el seguimiento completo de pila para DoesNotThrow. –

Respuesta

11

Assert.DoesNotThrow es redundante, si se lanza una prueba, la prueba fallará automáticamente sin una afirmación. Para aclarar lo que se está probando es, en mi humilde opinión, mejor transmitido en el nombre del método de prueba. Hay muy poco beneficio de documentación en la sintaxis Assert.DoesNotThrow y, como usted señala, simplemente dificulta la corrección de las pruebas fallidas.

Además, si tiene una prueba muy larga con múltiples afirmaciones, el Assert.DoesNotThrow cumple una función importante como para afirmar que el bloque de código correcto arrojó una excepción. Sin embargo, en este caso, una solución más adecuada es ver si la prueba puede acortarse y/o las aseveraciones pasar a sus propias pruebas.

3

Dudo que realmente responda a su pregunta, pero acortaría la prueba a una sola situación para que no tenga que ajustar un código en un delegado que pase al Assert.DoesNotThrow. Luego, solo escribe la prueba sin ninguna afirmación. Una prueba que arroja una excepción inesperada fallará, por lo que hará lo que usted desee, y obtendrá la excepción completa.

Aproximadamente el 10% -ish de mis pruebas funcionan así; sin aserciones, y nombres de métodos como ThisOrThatShouldNeverThrow().

Otra opción, durante la depuración, es ejecutar la prueba en un depurador (utilizando TD.Net) y en Depurar | Excepciones marcar algunos cuadros adicionales para que el depurador se detenga cuando se lanza la excepción.

+0

Hay muchas otras maneras de lograr esto, pero me preguntaba sobre el método DoesNotThrow, y más específicamente, si NUnit se puede configurar para mostrar esta información. Puedo imitar el método DoesNotThrow (que simplemente envuelve un try..catch supongo) y mostrar esta información yo mismo. –

+1

Ok, pensé que estabas tratando de resolver un problema práctico. En este caso, ¿por qué no parchearlo en NUnit y contribuirlo? Es probable que no seas la única persona interesada en esta función. – skrebbel

Cuestiones relacionadas