2009-04-09 17 views
22

En nuestro proyecto, ejecutamos tanto junits como cobertura utilizando maven. El problema al que me enfrento es queejecutando junits y cobertura con maven

  1. Los casos de prueba junit se ejecutan dos veces, una antes del proceso de creación del jar y otra vez para generar informes de cobertura de cobertura. Al ejecutar cobertura y junits con hormiga, ejecutamos junits solo una vez desde entonces, cobertura se ejecuta junto con junits. ¿Hay alguna forma de configurar el caso anterior con maven? Sé que podemos usar la propiedad "maven.test.skip" para omitir los junits. Pero cuando hago esto, no puedo ver los informes de archivos junit xml y html.
  2. También, en maven cómo configurar los puntos para ejecutar en lotes o en paralelo?

gracias!

+0

su segunda pregunta es realmente una cuestión diferente, cna parece ser publicada aquí: http://stackoverflow.com/questions/423627/running-junit-tests-in-parallel –

Respuesta

22

Aunque ya no puedo encontrar la página exacta, recientemente leí una discusión sobre por qué es una buena idea ejecutar las pruebas dos veces. Las cuestiones clave citadas se referían a los efectos de la alteración del código Cobertura byte en la precisión de sus pruebas. En ciertos casos, el momento de la ejecución del código puede ser importante, la alteración del código de bytes puede hacer que las pruebas que fallan en JUnit pasen cuando se ejecutan solo en Cobertura y viceversa. Por esta razón, se recomendó que las pruebas se puedan ejecutar dos veces. La mayoría de los ejemplos citados tenían que ver con comportamientos de subprocesos múltiples, pero imagino que podría haber otros casos donde la alteración del código de bytes puede causar problemas en las pruebas. Hacer que las pruebas se ejecuten en ambos sentidos le proporciona los resultados de línea de base y también reduce las posibilidades de enviarlo a una búsqueda inútil si Cobertura de hecho está alterando el éxito de la prueba.

+4

Este es un gran punto. Otra cosa con la que me encontré una vez es que debido a la reescritura del código de bytes, si su código usa mucho la reflexión, puede causar problemas. Por ejemplo, si tiene una utilidad que extrae campos de una clase, y su prueba de unidad afirma que una clase de ejemplo tiene tres campos, esta prueba realmente fallará cuando la ejecute con cobertura de código. –

+0

Sin mencionar el hecho de que las pruebas sin instrumentación se ejecutan mucho más rápido. –

+0

@DavidValeri: ¿Podría proporcionar un enlace al hilo de discusión que refiere (simplemente edite nuestra publicación)? –

1

Intente agregar cobertura como referencia de ámbito de compilación. Y publica las partes relevantes de tu pom.

+3

No tendría como una dependencia (con compile scope) solo será útil si su proyecto de alguna manera está tratando de construir algo además de cobertura. Esto probablemente no es lo que Ajay estaba buscando. –

1

Esto ocurre porque la ejecución de informes requiere la ejecución de la prueba para que pueda crear los informes. Si existiera un objetivo de "solo sitio" en el complemento del sitio que no tenía la anotación @requiresDependencyResolution test, podría vincularse a la fase prepare-package del proyecto y sus informes se generarían sin que las pruebas se ejecuten dos veces.

Desafortunadamente parece que actualmente no existe ese objetivo (ver mi question sobre el tema). Consulte mi respuesta a la pregunta para obtener detalles de una solución alternativa.

Cuestiones relacionadas