plugin - Cobertura de código en Java con EclEmma sin escanear esperando métodos de excepción
ecl emma (3)
Estoy tratando de obtener la cobertura de mi código en java, usando Eclipse y EclEmma.
Mis pruebas están usando JUnit 4 y tengo algunas pruebas que se parecen a esto:
@Test(expected = IllegalArgumentException.class)
public void createTime_withInvalidMinuteUnder0_throws(){
//Arrange
...
//Act
Something triggering IllegalArgumentException Here
}
Y EclEmma dice que la prueba falla porque se está generando una excepción IllegalArgumentException. Entonces deja caer el indicador de cobertura de mi código, aunque se supone que debe lanzar algo. ¿Hay una opción para hacer que vea la etiqueta de excepción esperada de JUnit?
Edición: ¡Descubrí que si agrega la tirada a la declaración de la prueba también, funciona!
Enfrenté el mismo problema y ofrecí una solicitud de extracción para lidiar con la causa más importante de esta molestia. En lugar de agregar demasiadas sondas, solo trato con los códigos de operación de invocaciones de métodos. En otras palabras, el problema de resultados de cobertura (previamente) incorrectos causados por una excepción generada por una invocación de método se resuelve, pero no si la excepción se produce, por ejemplo, por una división por cero, una conversión incorrecta o un índice de matriz. problema.
https://github.com/jacoco/jacoco/pull/261
Siéntase libre de comentar sobre la solicitud de extracción o participar en la discusión que comencé en la lista de correo de JaCoCo.
No puedo comentar aún, pero quería señalar, en relación con la respuesta aceptada, que hay una muy buena razón para prestar atención a la cobertura de su código de prueba.
Es muy fácil con JUnit arruinar la convención de nomenclatura del método de prueba u olvidar la anotación @Test, según la versión de JUnit. Haz eso, y fácilmente podrías hacerte creer que tu barra verde sólida significa que la buena prueba que acabas de agregar pasó, cuando en realidad nunca se ejecutó. La coloración de la cobertura lo mostrará muy prominentemente. Excepto, por supuesto, como lo señala este hilo, algunas de sus pruebas que arrojan excepciones pueden parecer que no se ejecutaron cuando lo hicieron.
No, no hay forma de que EclEmma note la cláusula expected
. Ellos reconocen este hecho here .
¿Por qué los casos de prueba de JUnit4 con excepciones esperadas se muestran como no cubiertos?
Los casos de prueba de JUnit4 con las excepciones esperadas se muestran como no cubiertos aunque se ejecutaron. La razón de esto es que la biblioteca de cobertura de código de JaCoCo subyacente solo considera el código como ejecutado cuando se ejecutan ciertas sondas. Para casos de prueba exitosos marcados con
@Test{expected=...}
este no es el caso.
Personalmente, no me preocuparía demasiado por eso. La cobertura de los casos de prueba es lo menos interesante que EclEmma puede decirle; Siempre ignoro por completo esas métricas y me concentro en la cobertura de mi código de producción.