我怎么可以做Cobertura/艾玛玩好与日食应用程序?
题
我的公司是中间的升级,我们建立系统的使用巴克明斯特(已)。自然管理人员将会喜欢它如果我们可以自动生成一些指标,它们利用代码,而我们在这-这些指标是复盖范围对于该单元的测试。
先前的建立,这是PDE-基础,导致在一个单独的无头的应用程序,它将分析,通过所有的插件的背景下,看起来它们内部为试验课程,把所有测试的情况下进入一个大套房,并运行它编程方式,通过 JUnitResultFormatter.startTestSuite()
.在这个过程中,它增加了一些本土的测试,特别是元数据(版权标记,等等)和测试包的依赖性。
好像我应该能出口的产品测试的应用程序、仪器仪表,它的复盖范围的工具,我的选择,然后再运行;然而,它看起来像两者的复盖范围的工具想要知道整个类路径,他们正在处理。是否有可能使这些工具发挥好不拖网捕我的整个建造工作区的罐子和依赖?
解决方案
管理,以获得的一切工作,帮助老这么问题。
我们开始 这个职位, ,这为我们提供了一个例子复盖范围的设置使用艾玛。然而,似乎我们需要迫依赖艾玛在每一个插件,我们希望得到复盖数据。
谷歌的一些法医学得到了我们 这本书的摘录, ,而充分地涵盖了访类装入器的层次结构。通过加入 osgi.parentClassloader=app
线的配置。ini的试验运行的应用程序,我们可以指定一类路径上的命令行.这类路径所需要的包括:
- 日食的
startup.jar
- Java SDK罐子使用的应用程序
- 罐子的复盖范围的工具
当然,我们正在运行测试通过 <java jar="foo.jar">
蚂蚁的任务,这不会默默地忽略了任何一类路径的信息提供和使用的罐子。之后我们得到了艾玛的工作,我们切换到Cobertura,并且我们最后的蚂蚁脚本(稍有删节和匿名)看起来像:
<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>
希望这可以帮助别人出是谁在同一个地点我们。