Jacoco - Zéro Pour Cent De Couverture

Je suis en train d'intégrer jacoco à notre ant et de l'évaluer avec un simple projet de test.

La compilation et l'autre de sortie de l'air prometteur, mais quand je regarde la couverture, il est toujours à zéro.

package alg;

public class SpecialAlgorithm {
    public SpecialAlgorithm() {}

    public int uncoveredMethod(int i) {
        return i * i;
    }

    public int sum(int i, int j) {
        return i + j;
    }   
}

Cas de test:

package alg;

import static org.junit.Assert.assertEquals;
import org.junit.Test;
import alg.SpecialAlgorithm;

public class SpecialAlgorithmTest {
    @Test
    public void testSum() {
        SpecialAlgorithm alg = new SpecialAlgorithm();
        int sum = alg.sum(1, 2);
        assertEquals(3, sum);
    }
}

Script Ant:

<project xmlns:jacoco="antlib:org.jacoco.ant" name="Code Coverage with JaCoCo"
default="rebuild">
<property name="src.dir" location="../java" />
<property name="test.dir" location="../../test/java" />
<property name="result.dir" location="c:/temp/jacoco/target" />
<property name="result.classes.dir" location="${result.dir}/classes" />
<property name="result.report.dir" location="${result.dir}/site/jacoco" />
<property name="result.exec.file" location="${result.dir}/jacoco.exec" />
<!-- Step 1: Import JaCoCo Ant tasks -->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="../../../lib/jacocoant.jar" />
</taskdef>
<target name="clean">
<delete dir="${result.dir}" />
<mkdir dir="${result.dir}" />
<mkdir dir="${result.dir}/site/jacoco/" />
</target>
<target name="compile" depends="clean">
<mkdir dir="${result.classes.dir}" />
<javac srcdir="${src.dir}" destdir="${result.classes.dir}"
debug="true" includeantruntime="false">
<classpath>
<pathelement location="${result.classes.dir}" />
</classpath>
</javac>
</target>
<target name="test" depends="compile">
<taskdef name="junit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
<classpath>
<pathelement location="../../../lib/junit.jar" />
<pathelement location="../../../bin" />
<pathelement location="${result.classes.dir}" />
</classpath>
</taskdef>
<jacoco:coverage destfile="${result.dir}/jacoco.exec"
xmlns:jacoco="antlib:org.jacoco.ant">
<junit fork="yes" forkmode="once" dir="." failureProperty="test.failed">
<classpath>
<pathelement location="../../../lib/junit.jar" />
<pathelement location="../../../bin" />
<pathelement location="${result.classes.dir}" />
</classpath>
<formatter type="xml" />
<batchtest todir="${result.report.dir}">
<fileset dir="${test.dir}"/>
</batchtest>
</junit>
</jacoco:coverage>
<!-- Step 3: Create coverage report -->
<jacoco:report>
<!-- This task needs the collected execution data and ... -->
<executiondata>
<file file="${result.exec.file}" />
</executiondata>
<!-- the class files and optional source files ... -->
<structure name="JaCoCo Ant Example">
<classfiles>
<fileset dir="../../../bin" />
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.dir}" />
</sourcefiles>
</structure>
<!-- to produce reports in different formats. -->
<html destdir="${result.report.dir}" />
<csv destfile="${result.report.dir}/report.csv" />
<xml destfile="${result.report.dir}/report.xml" />
</jacoco:report>
</target>
<target name="rebuild" depends="test" />
</project>

Mise à JOUR: Après la mise à niveau à la version la plus récente, je reçois un avertissement de ce qui pourrait indiquer que mon erreur est.

Sortie de la Console:

Buildfile: JacocoEvaluation\src\main\resources\coverage.xml
clean:
[delete] Deleting directory c:\temp\jacoco\target
[mkdir] Created dir: c:\temp\jacoco\target
[mkdir] Created dir: c:\temp\jacoco\target\site\jacoco
compile:
[mkdir] Created dir: c:\temp\jacoco\target\classes
[javac] Compiling 1 source file to c:\temp\jacoco\target\classes
test:
[jacoco:coverage] Enhancing junit with coverage
[jacoco:report] Loading execution data file c:\temp\jacoco\target\jacoco.exec
[jacoco:report] Writing bundle 'JaCoCo Ant Example' with 1 classes
[jacoco:report] Classes in bundle 'JaCoCo Ant Example' do no match with execution data. For report generation the same class files must be used as at runtime.
[jacoco:report] Execution data for class alg/SpecialAlgorithm does not match.
rebuild:
BUILD SUCCESSFUL
Total time: 1 second

La structure de répertoire (comme maven):

main/java/Classe de Test
test/java/cas de test

Les idées de ce que je fais de mal? Le plugin fonctionne très bien.

Mise à JOUR: Fonctionne maintenant. J'ai eu le mauvais répertoire référencé dans la structure du rapport. La version la plus récente de jacoco imprimé un avertissement qui a permis de repérer le problème.

En sortie le résultat de <jacoco:coverage> à ${result.dir}/jacoco.exec, puis <jacoco:report> est à la recherche de ${result.exec.file} lors de la construction de son rapport. Ce sont ces deux variables pointant vers le même endroit? (Vous n'avez pas inclure assez de votre script ant pour moi de le dire.) Vous devriez envisager d'utiliser une variable à travers le conseil d'administration à réduire le risque de ce genre de décalage.
Je suis sûr que c'est lié à une issues.jenkins-ci.org/browse/JENKINS-22716; je suis en train de vivre le même problème dans mon installation de Jenkins.
Pas de jenkins impliqués atm. Je l'ai essayé avec le routage vers un mauvais chemin d'accès à la jacoco.exec et l'échec de la construction puis. Si le fichier est trouvé. Je poste le script en entier en une minute. Merci les gars!
Il fonctionne maintenant. J'ai corrigé l'erreur et ont maintenant la couverture. Merci beaucoup pour vos commentaires!

OriginalL'auteur mkuff | 2014-04-29