【发布时间】:2016-11-19 00:41:32
【问题描述】:
我们针对完全部署的 Java Web 应用程序进行了一系列自动化测试(除了单元测试),并希望跟踪这些测试的代码覆盖率。该应用程序是用 Java 编写的,并在 Tomcat 上运行。我们目前使用 Cobertura 来跟踪我们的单元测试的覆盖率,所以我想坚持使用 Cobertura。我已经对我们的战争进行了检测,并且能够从 coberura.ser 文件生成报告,但它始终显示 0% 的覆盖率。
以下是我要遵循的步骤:
- 在正常过程中构建 jar 和 war(无检测)。我们的应用程序类被打包成一个 jar 文件,然后放置在我们部署的 war 的 lib 目录中。
- 解开罐子和战争的包装
- 再次重建,但这次检测类。
- 将检测到的类复制到解压缩的 jar 目录中。我这样做是因为检测似乎不会为没有可运行代码的东西(如接口)输出类文件。
- 从解压后的 jar 目录构建 jar
- 将新检测的 jar 和 cobertura.jar 添加到解压后的 war 目录的 lib 目录中,并从中构建一个 war。
- 将新的检测战争和 coberturaFlush.war 添加到 tomcat webapps 目录
- 将 cobertura.ser(在检测期间生成)添加到 tomcat bin 目录
- 启动 Tomcat
- 在应用中做事
- 在浏览器中点击 /coberturaFlush/flushCobertura。
- 停止 Tomcat
- 使用 cobertura-report.bat 从 cobertura.ser 文件生成报告
这是我迄今为止尝试过的:
- 我确认 jar 中的类文件引用了 cobertura,因此我确信它们已被检测。
- 我正在使用 coberturaFlush.war,因为我在停止应用程序时遇到了一堆 NoClassDefFound 错误,因此看起来关闭挂钩无法正常工作。这似乎是一个常见问题,coberturaFlush 似乎是一个合理的解决方法。
- 我确信 Cobertura 使用的是正确的 .ser 文件。当 Tomcat 启动时,我看到一些该文件迅速下降到 0KB,并创建了一个 cobertura.ser.lock 文件,然后又恢复到原始大小并删除了锁定文件。当我调用 flushCobertura 以及关闭 Tomcat 时,我看到同样的事情发生。
- 我还尝试在调用 flush 之后但在停止 Tomcat 之前使用 .ser 文件生成报告,但这也不起作用。
我错过了什么吗?知道为什么 Cobertura 总是说 0% 覆盖率吗?
提前致谢。
【问题讨论】:
标签: java tomcat code-coverage cobertura