Así es como lo hago. Creo un método estático llamado assertThrowsException que toma como argumentos una clase de excepción esperada y Runnable que contiene el código bajo prueba.
import junit.framework.Assert;
public SpecialAsserts {
public void assertThrowsException(final Class<? extends Exception> expected, final Runnable codeUnderTest) {
try {
codeUnderTest.run();
Assert.fail("Expecting exception but none was thrown.");
} catch(final Throwable result) {
if (!expected.isInstance(result)) {
Assert.fail("Exception was thrown was unexpected.");
}
}
}
}
Este es el código de ejemplo para utilizar la aserción especial en su clase de prueba (que se extiende AndroidTestCase o uno de sus derivados):
public void testShouldThrowInvalidParameterException() {
SpecialAsserts.assertThrowsException(InvalidParameterException.class, new Runnable() {
public void run() {
callFuncThatShouldThrow();
}
});
}
Sí, hay un montón de trabajo, pero es mejor que portar junit4 a android.
Android está usando una versión 3.x de junit, así que parece que no hay otra manera, excepto para incluir junit4 y cambiar a esto desde el junit de Android. – Mark
Acabo de ejecutar esto con el junit: 4.12 y me figuré que exception.expectMessage ("El icono es nulo, no es un archivo, o no existe."); no falla la prueba si el mensaje esperado no coincide. – takesavy