Probar excepciones y casos límite
Un buen test no solo comprueba que lo correcto funciona: comprueba que lo incorrecto falla como debe. Importes nulos, textos raros, duplicados: si el código tiene que rechazarlos, un test lo demuestra.
✓ En esta sub-lección
- 01Comprobar que un método lanza la excepción esperada con try, Assert.fail y catch.
- 02Probar los casos límite: null, vacío, tipos erróneos.
- 03Probar que un trigger rechaza un registro con addError.
La nutria: ¿Te acuerdas? · Repaso de la lección 4
¿Dónde va el Assert que comprueba el resultado de un Batch?
En el Módulo 8, el puente aprendió a rechazar: importes vacíos, textos que no son números, una segunda renovación abierta. Si mañana alguien «simplifica» parseAmount y quita el throw, ningún test de camino feliz lo notará. Hay que probar también el camino de error.
Comprobar que salta la excepción
try {
RenewalRow.parseAmount(null);
Assert.fail('Un importe nulo tenía que lanzar RenewalImportException'); // no debería llegar aquí
} catch (RenewalImportException e) {
Assert.isTrue(e.getMessage().contains('vacío'), 'Mensaje inesperado: ' + e.getMessage());
}Y si tu excepción envuelve a otra, como hace parseAmount con la TypeException del texto, compruébalo también: Assert.isInstanceOfType(e.getCause(), TypeException.class, mensaje). Así nadie podrá perder la causa original sin que un test se entere.
RenewalRow.parseAmount( … )
RESULTADO
12500.00
LO PROTEGE
parsesAValidAmount()
Probar el rechazo de un trigger
El guardián rechaza con addError. En el test, inserta con Database.insert(registro, false) y mira el SaveResult: isSuccess() tiene que ser false y el mensaje, el de tu addError. Es el mismo SaveResult del Módulo 8, ahora del lado de quien prueba.
La nutria: ¿Y por qué no un Flow? Aquí Flow también lo intenta