unitarias pruebas plugin java maven-2 build-automation code-coverage cobertura

java - pruebas - Cómo lograr que Cobertura falle la compilación de M2 ​​para una baja cobertura de código



cobertura plugin (2)

Agregue lo siguiente a la configuración <check />.

<haltOnFailure>true</haltOnFailure>

Estoy intentando configurar mi compilación de proyecto de WAR para que falle si la cobertura de línea o de rama está por debajo de los umbrales dados. He estado usando la configuración proporcionada en la página 455 del excelente libro Java Power Tools , pero sin éxito. Aquí está el fragmento relevante del Maven 2 POM de mi proyecto:

<build> ... <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.2</version> <configuration> <check> <!-- Per-class thresholds --> <lineRate>80</lineRate> <branchRate>80</branchRate> <!-- Project-wide thresholds --> <totalLineRate>90</totalLineRate> <totalBranchRate>90</totalBranchRate> </check> <executions> <execution> <goals> <goal>clean</goal> <goal>check</goal> </goals> </execution> <execution> <id>coverage-tests</id> <!-- The "verify" phase occurs just before "install" --> <phase>verify</phase> <goals> <goal>clean</goal> <goal>check</goal> </goals> </execution> </executions> <instrumentation> <excludes> <exclude>au/**/*Constants.*</exclude> </excludes> <ignores> <ignore>au/**/*Constants.*</ignore> </ignores> </instrumentation> </configuration> </plugin> ... </plugins> ... </build>

Como digo, el informe de cobertura funciona bien, el problema es que el objetivo de "instalación" no está fallando como debería si la cobertura de línea o de rama está por debajo de mis umbrales especificados. ¿Alguien tiene esto funcionando, y si es así, cómo es tu POM y qué versión de Cobertura y Maven estás usando? Estoy usando Maven 2.0.9 y Cobertura 2.2.

Intenté buscar en Google y leer los documentos de Cobertura, pero no tuve suerte (estos últimos son escasos por decir lo menos).


Que yo sepa, si el elemento <haltOnFailure> se establece en verdadero y cualquiera de las comprobaciones especificadas falla, entonces Cobertura hará que falle la compilación, que es lo que está pidiendo. Pero en realidad, este elemento se establece como true si no lo especifica, por lo que no tiene que agregarlo a las comprobaciones de configuración . Si falla la compilación debajo de cualquier límite de cobertura, (o al menos debería ser) el comportamiento predeterminado.

EDITAR: Hice algunas pruebas adicionales y haltOnFailure parece estar funcionando como se esperaba en mi entorno (Maven 2.2.1 y versiones 2.3, 2.2, 2.1 del plugin, es decir, las versiones 1.9.2, 1.9, 1.8 de cobertura en Linux). Estoy actualizando esta respuesta con el resultado a continuación.

En realidad, agregué un elemento <execution> a mi pom. Puedo estar malinterpretando la parte de la cobertura: comprobar que dice " Vincula por defecto a la fase del ciclo de vida: verify " pero, sin el elemento <execution> , cobertura: la verificación no se activó durante la fase de verificación de mi compilación . Debajo de la configuración que he usado para el cover-maven-plugin:

<project> ... <build> ... <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.3</version> <configuration> <check> <!--<haltOnFailure>true</haltOnFailure>--><!-- optional --> <!-- Per-class thresholds --> <lineRate>80</lineRate> <branchRate>80</branchRate> <!-- Project-wide thresholds --> <totalLineRate>90</totalLineRate> <totalBranchRate>90</totalBranchRate> </check> </configuration> <executions> <execution> <phase>verify</phase> <goals> <!--<goal>clean</goal>--><!-- works if uncommented --> <goal>check</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

Obtengo el siguiente resultado al ejecutar mvn clean install en un proyecto maven recién generado (con mvn archetype:create ) parcheado con la configuración del complemento mencionada anteriormente:

$ mvn archetype:create -DgroupId=com.mycompany.samples -DartifactId=cobertura-haltonfailure-testcase ... $ mvn clean install [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building cobertura-haltonfailure-testcase [INFO] task-segment: [clean, install] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory /home/pascal/Projects/cobertura-haltonfailure-testcase/target [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/main/resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/classes [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/test/resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 1 source file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/test-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.mycompany.samples.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.09 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/cobertura-haltonfailure-testcase-1.0-SNAPSHOT.jar [INFO] Preparing cobertura:check [WARNING] Removing: check from forked lifecycle, to prevent recursive invocation. [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/main/resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [cobertura:instrument {execution: default}] [INFO] Cobertura 1.9.2 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file Instrumenting 1 file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/generated-classes/cobertura Cobertura: Saved information on 1 classes. Instrument time: 337ms [INFO] Instrumentation was successful. [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/test/resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Nothing to compile - all classes are up to date [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.mycompany.samples.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.098 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [cobertura:check {execution: default}] [INFO] Cobertura 1.9.2 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file Cobertura: Loaded information on 1 classes. [ERROR] com.mycompany.samples.App failed check. Line coverage rate of 0.0% is below 80.0% Project failed check. Total line coverage rate of 0.0% is below 90.0% [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Coverage check failed. See messages above. [INFO] ------------------------------------------------------------------------ [INFO] For more information, run Maven with the -e switch [INFO] ------------------------------------------------------------------------ [INFO] Total time: 18 seconds [INFO] Finished at: Sat Oct 24 21:00:39 CEST 2009 [INFO] Final Memory: 17M/70M [INFO] ------------------------------------------------------------------------ $

No haltOnFailure con maven 2.0.9, pero en mi máquina, haltOnFailure genera un BUILD ERROR y detiene la compilación. No veo ninguna diferencia con la configuración de tu complemento. No puedo reproducir el comportamiento que describes.