2012-03-21 21 views
41

Quiero crear la prueba NUnit para asegurarme de que mi función no lanza una excepción. ¿Hay alguna forma específica de hacerlo, o simplemente debería escribirNUnit: prueba sin excepción esperada

[Test] 
public void noExceptionTest() { 
    testedFunction(); 
} 

y tendrá éxito si no se produce ninguna excepción?

+2

¿Eso es todo lo que quieres probar? Te das cuenta de que si testedFunction no funciona, pasará la prueba. – Martijn

+0

¿Su método tiene un requisito particular de no arrojar? ¿O se hace con el espíritu de * mi código funciona porque no arroja *? Si el último, migth desea comprobar [esos] (http://stackoverflow.com/questions/8788558/should-i-test-thhat-methods-dont-throw-exceptions) [dos] (http: // stackoverflow.com/questions/9417213/c-how-do-i-check-no-exception-occurred-in-my-unit-test) pregunta por qué, en general, no hace eso. Ganas muy poco o nada de tal prueba. –

+1

@jimmy_keen Como un caso excepcional, hemos utilizado para probar que llamar a Dispose() por segunda vez no arroja – Gareth

Respuesta

70
Assert.DoesNotThrow(() => { /* custom code block here*/}); 

O método que se acaba

Assert.DoesNotThrow(() => CallMymethod()); 

Para más detalles ver NUnit Exception Asserts

2

Sí, no se lanzaron excepciones -> pase de prueba. Si hubo un bloque try-catch sin re-throw, pasará también.

2

Estás en lo correcto. Si hay una excepción, la prueba fallará.

A menos que se especifique

[ExpectedException(typeof(YourException)) ] 
public void TestMethod() 
{ 
    ... 
} 

O como dice @sll, se utiliza la más específica

Assert.DoesNotThrow 

assertion.

4

No lanzar una excepción es el curso de acción normal. Su prueba verificará con éxito que no se lanza una excepción.

1

Creo que hay un problema relacionado con la lógica de prueba de la unidad. Si está esperando una excepción específica bajo ciertas entradas, la declara como una excepción esperada. Si solo está comprobando si su función se comporta correctamente y no se esperan excepciones durante este comportamiento correcto, simplemente escríbala y si arroja alguna excepción, su prueba falla.

Parece que su código funciona correctamente, por otro lado, solo verificar las excepciones puede no ser la forma correcta de probar la unidad. En las pruebas unitarias, en general, usted espera algunas salidas (valores esperados), tiene algunas salidas reales (valores reales) y afirma que los valores esperados y reales son los mismos.

8

Usando NUnit 3.0 Constraint Model tipo de afirmaciones el código sería de la siguiente manera:

Assert.That(() => SomeMethod(actual), Throws.Nothing);

Este ejemplo está tomado de NUnit wiki.

Cuestiones relacionadas