Después de haber trabajado con excepciones en Java y .NET Y después de leer muchos artículos sobre cómo / cuándo / por qué capturar excepciones, finalmente se me ocurrieron los siguientes pasos que paso por mi cabeza cada vez que veo una posible excepción, o un excepción debo atrapar (Java) ... incluso si nunca sucede (suspiro ...). Y parece estar funcionando, al menos para mí:
- ¿Hay algo útil que pueda hacer con esa excepción (excepto el registro)? Si la respuesta es sí, escriba el código de solución y si la solución puede generar excepciones, vaya a 2:
- Envuelva la excepción alrededor de una excepción de tiempo de ejecución, tírela, vaya a 3.
- En la clase de nivel superior donde se ha iniciado una posible transacción de base de datos / proceso, capture la excepción, revierta la transacción, vuelva a lanzar la excepción.
- En la clase de nivel superior (que puede ser aquella donde se inició la transacción), registre la excepción utilizando un marco de registro como slf4j (junto con log4j, por ejemplo) o log4net . Si es posible, envíe directamente la excepción por correo electrónico a una lista de distribución compuesta por desarrolladores de la aplicación.
- Si hay una GUI, muestre un mensaje de error que indique de la manera más fácil de usar qué causó el problema; no muestra la excepción / stacktrace, al usuario no le importa y no necesita saber que fue una NullPointerException.
También debo agregar el paso 0 , donde estoy lanzando a propósito lo que llamo una excepción "comercial" (una nueva excepción que creo al extender la clase "Excepción") cuando algún tratamiento complejo no puede ejecutarse debido a errores de datos, PERO eso se sabe que suceden ya que se han identificado como casos de excepción durante el análisis.
Excepto por la parte de registro, estoy totalmente de acuerdo con los puntos escritos por "mikera"; Solo agregaré que la excepción debe registrarse solo una vez .
Además, los pasos que enumeré pueden ser diferentes si lo que está escribiendo es un API / Framework . Allí, lanzar excepciones bien diseñadas es obligatorio para ayudar a los desarrolladores a comprender sus errores.
En cuanto a probar las excepciones, con el uso de objetos simulados debería poder probar casi todo, ya sea de forma excepcional o no, siempre que sus clases respeten la práctica recomendada de "una clase para hacer una cosa". También me aseguro de marcar los métodos más importantes pero ocultos como "protegidos" en lugar de "privados" para poder probarlos sin demasiados problemas. Aparte de eso, probar excepciones es simple, solo provoca la excepción y "espera" que ocurra una excepción al atraparla. Si no obtiene una excepción, entonces tiene un error de caso de prueba de unidad.