【发布时间】:2020-02-26 09:23:47
【问题描述】:
我们使用非 java 测试。他们每个人都执行我们用 Java 编写的工具。
我正在尝试使用 Eclemma 创建测试的覆盖率报告。
让我们从一项测试开始。我们使用build.xml 编译代码。我想以某种方式为每个测试创建一个覆盖率报告,然后将它们合并到一个主报告中。
我发现我可以使用Jacoco has CMD interface 来合并这些报告。但我不明白如何使用覆盖包运行该工具?
- 我应该使用哪个覆盖包?是 Eclemma 还是 Jacoco?
- 如何使用覆盖包运行该工具?我应该将它添加到 build.xml 文件中吗?我应该将它添加到命令行吗?
我对 Java 中覆盖的整个概念有点困惑。在 Python 和 Perl 等动态语言中,我只是使用覆盖率模块执行代码,从而创建覆盖率报告。
我们用来执行out tool的命令:
gandu -vm /usr/pkgs/java/1.6.0.25-64/bin/java -configuration /.ganduData -data /.ganduData -configuration /ganduInternalConfig --session_id 1582722179
我应该添加一些选项吗?
build.xml 中的构建:
<target name="pde-build" depends="clean, init">
<java classname="org.eclipse.equinox.launcher.Main" fork="true" failonerror="true">
<arg value="-application" />
<arg value="org.eclipse.ant.core.antRunner" />
<arg value="-buildfile" />
<arg value="${eclipseLocation}/plugins/org.eclipse.pde.build_${pdeBuildPluginVersion}/scripts/productBuild/productBuild.xml" />
<arg value="-Dtimestamp=${timestamp}" />
<classpath>
<pathelement location="${eclipseLocation}/plugins/org.eclipse.equinox.launcher_${equinoxLauncherPluginVersion}.jar" />
</classpath>
</java>
</target>
我应该添加以下命令吗?
<arg value="-autVMArgs" />
<arg value="-Xmx800m;-XX:MaxPermSize=600M;-javaagent:${jacoco-agent-path}=destfile=${jacoco-report},append=true"/>
更新:感谢这两个答案,我设法使用 CLI 创建了报告。但看起来它显示(几乎)零覆盖率。它在我看到已执行的打印行上显示红色(未覆盖)(它们被打印到标准输出)。
该项目包含很多包,但第一次尝试我正在尝试为特定包创建覆盖率报告。我跑了:
gandu -vm /usr/pkgs/java/1.6.0.25-64/bin/java -configuration /.ganduData -data /.ganduData --session_id 1583967465 -vmargs -Xmx256m -Xms128m -javaagent:/jacoco_coverage/jacoco-0.8.5/lib/jacocoagent.jar
然后我跑了:
/usr/pkgs/java/1.6.0.16-64/bin/java -jar /jacoco_coverage/jacoco-0.8.5/lib/jacococli.jar report jacoco.exec --classfiles /gandu_repo/com.core.gandu/bin/ --html temp_dir --sourcefiles /gandu_repo/com.core.gandu/src/
输出:
[WARN] Some classes do not match with execution data.
[WARN] For report generation the same class files must be used as at runtime.
[WARN] Execution data for class <PATH> does not match.
[INFO] Analyzing 8 classes.
我很难理解classfiles 和sourcefiles 的含义。我试图报道的文件是Application。在bin 中有一些内部文件夹Application.class,在src 中有一些内部文件夹Application.java。我什至尝试在classfiles 和sourcefiles 中添加这些文件的完整路径,但仍然没有覆盖范围(全为红色)。可能是什么问题呢?
工具的结构:
根目录包含很多包,每个包都有文件夹bin 和src。每个src 都包含带有Java 文件的递归文件夹。 bin 与 class 文件具有相同的结构。
【问题讨论】:
标签: java code-coverage jacoco eclemma