2012-06-17 14 views
6

Hola a todos, estoy haciendo una IA de ajedrez como proyecto de hobby con Test Driven Development. Pero por alguna razón, el único mensaje que dan mis pruebas es "la prueba arrojó una excepción: ...". Y por lo tanto, omitir lo único que importa. En lugar de leer directamente el error, ahora tengo que hacer clic derecho y ver los detalles del resultado de la prueba. He intentado agregar y eliminar columnas, pero no puedo ver todo el mensaje directamente.La prueba de unidad arroja una excepción pero no puede ver el mensaje

¿Se puede configurar VS2010 para que el mensaje de excepción se muestre directamente para cada prueba unitaria?

editar: Estoy utilizando Standaard VS pruebas unitarias:

[TestClass] 
public class MiniMaxTest 
{ 
    [TestMethod] 
    public void TestConstructor() 
    { 
     throw new Exception("Must I click view details to see this?"); 
    } 
} 

¿Por qué estas preguntas? Ustedes pueden reproducir estas cosas. Las pruebas de depuración o ejecución dan los mismos mensajes: exception message remains hidden

+2

¿Podría proporcionar más detalles? Por ejemplo, ¿qué marco de prueba está usando (MSTest)? ¿Cómo son tus pruebas? – stakx

+1

¿estás usando MSTest? Si no, especifica tu herramienta de prueba de la unidad. Además, ¿por qué no depuran su método de prueba? – BrokenGlass

+0

Si entendí bien, ¿está diciendo que el campo o columna que muestra el mensaje es demasiado corto para mostrar la excepción completa? Bueno, no se supone que las pruebas unitarias fallen constantemente, por lo que "hacer clic para ver los detalles" de vez en cuando no debería ser tan importante. – Groo

Respuesta

2

No, no creo que pueda configurar VS para mostrarlo de manera diferente. El IDE muestra la primera línea del mensaje de excepción, y hay un carácter de línea nueva en el texto completo del mensaje, por lo que deberá hacer clic en los detalles para ver todo el asunto.

Lo que puede hacer sin embargo, es abusar del marco MSTest para mostrar sus propios mensajes.

MS Test Assertions se implementan lanzando excepciones. Todas las funciones MS Test Assert arrojan excepciones derivadas de UnitTestAssertException. Visual Studio tiene un manejo especial para este tipo de excepciones.

Por ejemplo: Si se escribe esta prueba:

[TestMethod] 
public void AllAboard() 
{ 
    throw new AssertFailedException("Failboat"); 
} 

AssertFailedException es la clase base estándar para la mayoría de los errores de aserción.

Notará que VS2010 no no imprime el mensaje genérico "prueba arrojó una excepción", sino que simplemente imprime "Failboat".

Ahora lo que puede hacer es rodear sus pruebas en cosas que convierten excepciones normales en AssertFailedException y luego puede imprimir los mensajes que desee.

[TestMethod] 
public void TestStuff() 
{ 
    try 
    { 
     string o = null; // pretend this came from some real code 
     var x = o.Split(new[] { ',' }); // this will throw NullRefException 
    } 
    catch (Exception e) 
    { 
     throw new AssertFailedException(e.Message, e); 
    } 
} 

Por supuesto, yo no recomendaría realmente hacer esto ... es prolijo, y lo más importante, se pierde la pila de llamadas ... pero bueno, ahora usted tiene una herramienta más en su cinturón de herramientas

+0

+1 Para una solución viable, pero estoy de acuerdo, parece que Overkill – Basic

+0

@Basic, sí, no lo haría, pero VS no te da ninguna opción ... así que si quieres reaaaaaaaaaaaaaaaaaa cambiar los mensajes, eso es lo que tienes que hacer :-) –

Cuestiones relacionadas