gpt4 book ai didi

java - 如何让 Cobertura/Emma 与 Eclipse 应用程序完美配合?

转载 作者:行者123 更新时间:2023-11-30 05:17:06 24 4
gpt4 key购买 nike

我的公司正在升级我们的构建系统以使用 Buckminster(进展顺利)。当然,如果我们能够在我们处理代码时自动生成他们用于代码的一些指标,那么经理们自然会喜欢它 - 其中一个指标是单元测试的覆盖率。

之前的构建基于 PDE,产生了一个单独的 headless (headless)应用程序,该应用程序解析上下文中的所有插件,在其中查找测试类,将所有测试用例放入一个更大的套件中,然后以编程方式运行它,通过 JUnitResultFormatter.startTestSuite()。在此过程中,它添加了一些针对特定元数据(版权标记等)的自制测试以及包依赖性测试。

看来我应该能够导出测试应用程序的产品,使用我选择的覆盖工具对其进行检测,然后运行它;然而,看起来这两个覆盖工具都想知道它们正在处理的整个类路径。是否有可能使这些工具中的任何一个都能很好地发挥作用,而无需在整个构建工作区中寻找 jar 和依赖项?

最佳答案

在一个旧的 SO 问题的帮助下,设法让一切正常工作。

我们从 this post 开始,它为我们提供了使用 EMMA 的覆盖设置示例。然而,我们似乎需要在每个我们想要获取覆盖率数据的插件上强制依赖 EMMA。

一些 Google 取证让我们得到 this book excerpt ,它相当充分地涵盖了 OSGi 类加载器层次结构。通过添加osgi.parentClassloader=app行到测试运行应用程序的 config.ini 中,我们可以在命令行上指定类路径。该类路径需要包括:

  • Eclipse 的 startup.jar
  • 应用程序使用的 Java SDK jar
  • 覆盖率工具的 jar

当然,我们是通过 <java jar="foo.jar"> 运行测试的。 Ant 任务会默默地忽略您提供的任何类路径信息并仅使用 jar。在让 Emma 工作后,我们切换到 Cobertura,我们的最终 Ant 脚本(略有删节和匿名)如下所示:

<target name="generate.coverage" depends="buckminster.init">
<!-- Generate the classpath. -->
<path id="cobertura.classpath">
<fileset dir="${tasks.dir}/lib/cobertura">
<include name="cobertura.jar" />
<include name="**/*.jar" />
</fileset>
</path>
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />

<!-- Get ready to run the unit tests app, and delete old coverage data. -->
<unzip src="${test-app.artifact}" dest="${output.dir}" overwrite="true" />
<delete file="${output.dir}/cobertura.ser" />

<!-- Instrument the jars in-place. Make sure to only capture what you want instrumented! -->
<cobertura-instrument datafile="${output.dir}/cobertura.ser">
<fileset dir="${output.dir}/test-app/plugins">
<include name="**/*our.company_*.jar" />
</fileset>
</cobertura-instrument>

<!-- Run the unit test application, by classname rather than by jar. -->
<java fork="true" classname="org.eclipse.equinox.launcher.Main" logerror="true" failonerror="true" maxmemory="1G">
<classpath>
<pathelement location="${output.dir}/test-app/startup.jar" />
<pathelement location="${tasks.dir}/lib/cobertura/cobertura.jar" />
<fileset dir="${tasks.dir}/lib/cobertura">
<include name="**/*.jar" />
</fileset>
<pathelement location="${java.class.path}" />
</classpath>
<sysproperty key="net.sourceforge.cobertura.datafile" file="${output.dir}/cobertura.ser" />
<arg value="-data" />
<arg value="${output.dir}/test-app/workspace" />
<arg value="--formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter:${log.dir}/test-results.xml" />
</java>

<!-- Generate the coverage reports. -->
<cobertura-report format="html" datafile="${output.dir}/cobertura.ser" destdir="${output.dir}/cobertura-report">
<fileset dir="${workspace.dir}/plugins">
<include name="**/*.java" />
</fileset>
</cobertura-report>
</target>

希望这可以帮助那些与我们处于同一位置的人。

关于java - 如何让 Cobertura/Emma 与 Eclipse 应用程序完美配合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/655979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com