Es habitual ver la funcionalidad de registro en el código¿Deberíamos registrar la unidad de prueba?
public class A {
private static final Log LOG = LogFactory.getLog(A.class);
y el uso
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throw e;
}
pero nunca vi ni siquiera una sola unidad de prueba para tal código.
Por supuesto, hago una prueba arrojando excepción y tipo de excepción, pero ¿debo escribir la prueba para verificar la información de registro? Tiendo a pensar que el registro es otra parte del comportamiento del sistema, por lo que es lógico dejarlo en las pruebas.
Suponiendo que debería cubrirlo, significa que debería cambiar el código original para inyectar el registro simulado y comprobar que se invocó el método de "error" con el mensaje esperado. ¿Pero qué hacer si mi clase original es el servicio y se crea una instancia para la primavera, debería inyectar algún registrador, así como otras dependencias?
es el mismo enfoque que he mencionado en mi pregunta. Pero para mí todavía no está claro qué hacer en el caso de los servicios de primavera, ya que generalmente LOG se creó para cada clase, por lo que es específico para cada clase y no puedo convertirlo en singleton. –
Si no tiene ningún control sobre el código que ejemplifica el objeto de registro, es difícil probar el comportamiento, porque no puede usar un registro falso. Podrías dejar que se registre con el objeto Log real, luego verificar que se haya registrado un mensaje. Sin embargo, ¡eso es difícil de automatizar! –
No, estoy de acuerdo con usted en que el código de registro debe ser probado. De lo que significa que deberíamos haber establecido para LOG, por lo que sería posible pasar pruebas simuladas de inicio de sesión, pero qué hacer en caso de servicios de primavera. Estoy pensando en 2 maneras posibles: 1) tener un setter pero llamar solo desde pruebas (podría ser difícil restringir dicha visibilidad ya que la primavera podría hacer una inyección automática), 2) inyectar el registrador durante la primavera, pero en este caso es difícil instanciar el registrador apropiado. –