2011-08-04 14 views
7

He seguido este consejo para conseguir la depuración de trabajo para las pruebas NUnit.pruebas de depuración nUnit en Visual Studio C# Express 2010

http://www.blackwasp.co.uk/NUnitCSharpExpress.aspx

Sin embargo, tengo varias pruebas que hacen Assert.Throws<...>, lo que hace que el depurador a romperse cuando la excepción que estoy probando para ocurre, cuando en realidad lo que quiero que se rompa si se produce una excepción fuera de esas llamadas .

¿Cómo puedo obtener el depurador de ignorar excepciones causadas desde el interior de este tipo de métodos?


EDITAR: He intentado el evento a continuación, lo cual no funciona.

[Test] 
public void InstanciatingWithNullParameterThrowsException() 
{ 
    try 
    { 
     Assert.Throws<ArgumentNullException>(() => new CachedStreamingEnumerable<int>(null)); 
     // This still throws and stops be being able to debug tests called after this one 
    } 
    catch 
    { 

    } 
} 
+2

También me gustaría obtener una respuesta a este problema, que ninguna de las respuestas a continuación es. –

Respuesta

4

aquí es lo que funcionó para mí (aunque en Visual Studio Professional, no Express, pero supongo que eso no debería importar).

  • Abra el cuadro de diálogo "Excepciones" según lo sugerido por Ninjapig.

  • clic en el botón Add..., para abrir el diálogo "Nueva excepción".

  • Seleccione "Common Language Runtime excepciones" en el cuadro desplegable
  • En el cuadro Editar abajo entran "NUnit.Framework.AssertionException".
  • Haga clic en OK para cerrar el cuadro de diálogo "Nueva excepción".
  • Nuevamente en el diálogo "Excepciones", asegúrese de que ambas casillas de verificación (ThrownyUser-unhandled) son sin control.

Ahora, el depurador debe ignorar completamente un error de aserción NUnit (es decir, un tirado, atrapado o no, NUnit.Framework.AssertionException).

ACTUALIZACIÓN: Esto solo evitará que entre en el depurador, no puede ignorar la excepción en sí; es decir, no alterará el flujo real del programa. Además de cambiar o reemplazar o encapsular las llamadas de confirmación en bloques de prueba y captura, no creo que haya nada que pueda lograr eso (al menos no automáticamente).

+1

Eso no funcionó ya que el depurador se está rompiendo cuando se lanza la excepción que estoy probando, no si la afirmación falla. En mi caso, es una 'NullReferenceException' que obtengo. –

+0

@George Duckett: Bien, ahora estoy confundido ;-) Entendí que desea específicamente no entrar en el depurador por fallas en las operaciones de Assert. *() De NUnit; que se manifiestan como 'NUnit.Framework.AssertionException's siendo lanzados. Por supuesto, "ignorar" en este caso significa no entrar en el depurador, por supuesto, el programa obtendrá la excepción y procederá de acuerdo con ello. Si quieres hacer como si esa excepción nunca hubiera sucedido, supongo que no hay nada que puedas hacer realmente, excepto no tirarlo en primer lugar. –

+0

Lo siento, lo intentaré y aclararé. En mis pruebas, estoy verificando si ocurre una excepción en particular. Cuando invoca a nunit usando el método, descubro que se rompe cuando ocurre esa excepción que estoy buscando. Como en realidad estoy probando la ocurrencia de esa excepción, quiero ignorarla para pasar a las pruebas que realmente quiero depurar. –

0

No estoy seguro de si VS2010 Express tiene esta opción, pero puede elegir las excepciones para romper.

Ir al menú 'depuración', luego seleccione 'Excepciones' Menu options

y desde aquí se puede seleccionar qué excepciones para romper el Exceptions selection window

+0

Buena idea, sin embargo, no quiero romper con excepciones específicas, quiero no romper si se lanzan desde un método 'Assert.Throws'. –

0

he terminado haciendo referencia nunit-gui-runner.dll y la invoca como

NUnit.Gui.AppEntry.Main(new string[] { Dll }); 

Esto nos lleva a la interfaz gráfica de usuario NUnit. A continuación, puedo realizar la prueba específica que me interesa.

0

que tenían el mismo problema.Aunque su enfoque original (sin la necesidad de un bloque try...catch) funciona para la mayoría de los tipos de excepciones, ArgumentNullException no funciona. Lo arreglé así:

[Test] 
public void InstanciatingWithNullParameterThrowsException() 
{ 
    bool isArgumentNullExceptionThrown = false; 
    try 
    { 
     new CachedStreamingEnumerable<int>(null); 
    } 
    catch (ArgumentNullException) 
    { 
     isArgumentNullExceptionThrown = true; 
    } 
    Assert.That(isArgumentNullExceptionThrown); 
} 

No es tan elegante, pero parece funcionar.

Cuestiones relacionadas