Pregunta

Estoy usando el complemento Maven (2) Cobertura para crear informes sobre la cobertura del código, y tengo el siguiente código auxiliar que estoy usando en un método:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
}
System.err.println("The program never exited!");

Sé que necesito registrar la excepción, etc., pero ese no es el punto en este momento ... Cobertura se niega a reconocer que la línea después de que se imprime el seguimiento de la pila está cubierta. Es decir, la línea con el '}' antes de la instrucción System.err.println no se muestra como cubierta. Antes, la llave final del método no se mostraba como cubierta, de ahí la declaración System.err . ¿Alguna idea de cómo puedo convencer al complemento Maven de cobertura de que, dado que la declaración System.err.println está cubierta, esa llave final tiene que estar cubierta?

Ah, sí, y utilizo un administrador de seguridad simulado para lanzar la excepción de seguridad, ya que esa es la forma más fácil que he encontrado de hacer que la prueba continúe ejecutándose después de la llamada System.exit .

¿Fue útil?

Solución

No he usado Cobertura en un tiempo (¿2005?), y vi este comportamiento en aquel entonces. Existe un problema similar con NCover para C # y llaves entre los bloques catch / finally.

Mi sugerencia sería agregar a este informe de error de Cobertura detallando un problema similar . Además, siga los consejos de @ tvanfosson y tenga en cuenta que no tener cobertura en una llave, que en realidad no se convierte en nada en la JVM, es algo que puede ignorar como "ruido".

Otros consejos

Vería el informe de cobertura. Comprueba mis pruebas. Tenga en cuenta que el código realmente se está cubriendo y no se preocupe por alcanzar el 100%. La cobertura del código se utiliza mejor para encontrar áreas que no haya accedido a sus exámenes, pero centrarse en obtener una cobertura del 100% como objetivo es un mal hábito que puede llevarlo a omitir los exámenes que deben escribirse solo porque su herramienta muestra 100% Use la herramienta para lo que puede hacer, pero no caiga en la trampa de dejar que la herramienta defina lo que hace.

En el formato de archivo de clase Java, cada método se anota con una compensación de código de mapeo de tabla a números de línea. En este caso, la llave de cierre no produce ningún código de byte, por lo tanto, no está cubierto. Este es un problema de correspondencia imperfecta entre la fuente y el código de bytes. Debe ser manejado por la herramienta de cobertura, reconociendo esta línea como no codificada.

Sé que Emma tiene problemas similares. A Clover le va mucho mejor, pero es comercial (no estoy seguro si manejaría este caso también) . Si usa IDEA, debe probar su nueva implementación de cobertura - es bastante bueno y en desarrollo activo.

Sé que esta es una vieja pregunta y que Cobertura ya lo ha solucionado, pero para completar la cobertura faltante en el "} " fue causado por el interno automáticamente " finalmente " bloque.

Vea su código así:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
} finally {
    // noop
}

Afortunadamente, esto ya no sucede para algunas versiones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top