En JUnit4 puede escribir pruebas de unidades parametrizadas proporcionando la recopilación de parámetros en un método, que se pasará al constructor de la prueba y la prueba en otro método. Si tengo un parámetro para el cual espero una excepción, ¿cómo especifico eso?¿Cómo pruebo las excepciones en una prueba parametrizada?
Respuesta
if (parameter == EXCEPTION_EXPECTED) {
try {
method(parameter);
fail("didn't throw an exception!");
} catch (ExpectedException ee) {
// Test succeded!
}
}
Si utilizó catch-exception en lugar de las anotaciones y las reglas de junit4 correspondientes, a continuación, el código se vería así:
catchException(obj).method(parameter);
if (parameter != EXCEPTION_EXPECTED) {
assert caughtException() instanceof ExpectedException;
}
// more assertions
A diferencia de lo que otros sugieren, yo no introducir ningún tipo de lógica para las pruebas, ¡incluso simples ifs!
Lo que debe tener son dos métodos de prueba:
- primera tiene parámetros válidos (y espera que parte de la producción)
- segundas tomas parámetros no válidos (y espera excepciones)
No está seguro si JUnit con su prueba parametrizada basada en el constructor puede hacerlo. Probablemente tendrías que crear dos clases de prueba para esto. Vaya con JUnit Params o TestNG que ofrecen una solución mucho más conveniente.
Gabriel, mira la regla TestWatcher (desde JUnit 4.9). Aquí está el código de ejemplo citado de http://junit-team.github.io/junit/javadoc/4.11/org/junit/rules/TestWatcher.html:
public static class WatchmanTest {
private static String watchedLog;
@Rule
public TestWatcher watchman= new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
watchedLog+= description + "\n";
}
@Override
protected void succeeded(Description description) {
watchedLog+= description + " " + "success!\n";
}
};
@Test
public void fails() {
fail();
}
@Test
public void succeeds() {
}
}
Otro enfoque sería utilizar ErrorCollector de JUnit 4.7: @Rule ExpectedException pública lanzada = ExpectedException.none();
@Test
public void testCollectingErrors() {
thrown.handleAssertionErrors();
thrown.expect(MultipleFailureException.class); // or #expectMessage()/#expectCause()
collector.checkThat("a", equalTo("b"));
//...
}
así es como yo uso la prueba junit parametrizada con excepciones esperados:
@RunWith(Parameterized.class)
public class CalcDivTest {
@Parameter(0)
public int num1;
@Parameter(1)
public int num2;
@Parameter(2)
public int expectedResult;
@Parameter(3)
public Class<? extends Exception> expectedException;
@Parameter(4)
public String expectedExceptionMsg;
@Rule
public ExpectedException thrown = ExpectedException.none();
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {
// calculation scenarios:
{ 120, 10, 12, null, null }, // simple div
{ 120, 0, -1, ArithmeticException.class, "/ by zero" }, // div by zero
});
}
@Test
public void testDiv() throws CCalculationException {
//setup expected exception
if (expectedException != null) {
thrown.expect(expectedException);
thrown.expectMessage(expectedExceptionMsg);
}
assertEquals("calculation result is not as", expectedResult, div(num1, num2));
}
private int div(int a, int b) {
return a/b;
}
}
- 1. ¿Cómo pruebo las múltiples excepciones con PHPUnit?
- 2. Prueba de Google: ¿Hay alguna manera de combinar una prueba que esté parametrizada y parametrizada en valores?
- 3. ¿Cómo realizo una consulta parametrizada en CouchDB
- 4. ¿Cómo pruebo las rutas en los complementos de Rails 3?
- 5. Prueba :: Más no sabe si la prueba muere, entonces, ¿cómo la pruebo?
- 6. Excepciones en PHP - Prueba/captura o set_exception_handler?
- 7. Jenkins - activando una compilación parametrizada
- 8. ¿Cómo pruebo SSL en una máquina de desarrollador?
- 9. Cómo pasar una clase parametrizada como argumento
- 10. ¿Cómo pruebo la unidad de las funciones sobrecargadas?
- 11. ¿Cómo pruebo las migraciones de bases de datos?
- 12. ¿Cómo interceptarías todas las excepciones?
- 13. Registrar todas las excepciones en una aplicación pyqt4
- 14. ¿Cómo funcionan las excepciones en Haskell?
- 15. Cómo capturar todas las excepciones/accidentes en una aplicación .NET
- 16. ¿Cómo se detectan las excepciones en una implementación de EventMachine?
- 17. Pasar un nombre de tipo y una cadena a una prueba parametrizada mediante la prueba de google
- 18. ¿Cómo pruebo el desarrollo de GWT?
- 19. Cómo ignoro las excepciones en F #
- 20. ¿Cómo pruebo la unidad para EXC_BAD_ACCESS?
- 21. ¿Cómo hacer una consulta SQL parametrizada en ASP clásica?
- 22. ¿Cómo escribir una consulta parametrizada en el estudio de gestión?
- 23. Cómo utilizar IS NULL en una consulta parametrizada (Delphi)
- 24. Jenkins: cómo hacer los parámetros necesarios en una compilación parametrizada?
- 25. ¿Cómo pruebo la unidad de una tarea personalizada?
- 26. Python: excepciones en las asignaciones
- 27. Prueba Excepciones de un método con EasyMock
- 28. C#, NUnit: ¿Cómo lidiar con las pruebas de las excepciones y de ejecución diferida
- 29. ¿Cómo pruebo la unidad de objetos heredados?
- 30. Estilo/plantilla parametrizada en WPF?
que esperaba para una solución más razonable - por ejemplo, algo así como varios métodos @Parameters con argumento de anotación esperado opcional, pero creo que algo así no es parte del marco. Gracias de todos modos. –