我刚刚开始将Cobertura集成到我们使用Ivy作为依赖管理工具的主要产品的构建过程中。有几个库lib-a
,没有测试用例,一个项目依赖于这些库并包含所有这些库的单元和集成测试lib-b
。lib-c
通常,检测、运行检测测试和生成 Cobertura 报告是可行的。但是,有几个问题:
在检测期间,报告了几个警告(大约 10 个):
Problems instrumenting archive entry: a.b.c.MyClassFoo java.lang.RuntimeException: java.lang.ClassNotFoundException: a.b.c.MyClassBar
但是,报告的类是存在的。在检测结束时,它会报告
Saved information on 364 classes
- 查看报告时,它显示了所有类,但所有依赖库的类都报告为 0% 覆盖率。
- 查看详细信息时,它报告未找到任何来源。
现在我认为问题可能是,Cobertura 存在问题 - 检测作为 jar 文件提供的类文件和 - 从 jar 文件中获取源
我的 build.xml 中的检测 ant 任务执行以下操作:
<cobertura-instrument todir="${build.dir}/instrumented-classes">
<includeClasses regex="com\.mycompany.*" />
<instrumentationClasspath>
<path refid="default.test.classpath" />
<pathelement location="${build.classes.dir}" />
</instrumentationClasspath>
</cobertura-instrument>
这应该足够了吗?
我想知道,因为报告的警告。所有报告的类都可以在 jar 中找到。
对于第二个问题,我什至不知道如何将来源作为罐子提供给 cobertura-report ......
我试过了
<cobertura-report destdir="${build.dir}/coverage">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<ivy:cachefileset conf="runtime-test" type="sources"/>
</cobertura-report>
但它说不cachefileset
支持。我也尝试使用pathid
我也无法在cobertura-report
. 我是否必须先解压缩所有源(这将非常耗时),然后将它们作为正常提供fileset
?