【问题标题】:Cobertura shows 0% coverage for instrumented WAR in TomcatCobertura 在 Tomcat 中显示 0% 的检测 WAR 覆盖率
【发布时间】:2016-11-19 00:41:32
【问题描述】:

我们针对完全部署的 Java Web 应用程序进行了一系列自动化测试(除了单元测试),并希望跟踪这些测试的代码覆盖率。该应用程序是用 Java 编写的,并在 Tomcat 上运行。我们目前使用 Cobertura 来跟踪我们的单元测试的覆盖率,所以我想坚持使用 Cobertura。我已经对我们的战争进行了检测,并且能够从 coberura.ser 文件生成报告,但它始终显示 0% 的覆盖率。

以下是我要遵循的步骤:

  1. 在正常过程中构建 jar 和 war(无检测)。我们的应用程序类被打包成一个 jar 文件,然后放置在我们部署的 war 的 lib 目录中。
  2. 解开罐子和战争的包装
  3. 再次重建,但这次检测类。
  4. 将检测到的类复制到解压缩的 jar 目录中。我这样做是因为检测似乎不会为没有可运行代码的东西(如接口)输出类文件。
  5. 从解压后的 jar 目录构建 jar
  6. 将新检测的 jar 和 cobertura.jar 添加到解压后的 war 目录的 lib 目录中,并从中构建一个 war。
  7. 将新的检测战争和 coberturaFlush.war 添加到 tomcat webapps 目录
  8. 将 cobertura.ser(在检测期间生成)添加到 tomcat bin 目录
  9. 启动 Tomcat
  10. 在应用中做事
  11. 在浏览器中点击 /coberturaFlush/flushCobertura。
  12. 停止 Tomcat
  13. 使用 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


    【解决方案1】:

    我想你可能在“JAR 地狱”中。我遇到了同样的问题,并且能够通过以下方式解决它:

    1. 不要在 webapp 环境中包含 cobertura.jar 文件
    2. 将 cobertura.jar 文件复制到 Tomcat 公用库目录

    coberturaFlush 正在寻找 Tomcat 级别的库;通过在 Web 应用程序中添加另一个实例,该 Web 应用程序的计数器与整个 Tomcat 计数器是分开的。

    另一种选择,不是最好的,但它有效,是让您的 web 应用调用 Cobertura FAQ 中所述的 saveGlobalProjectData 方法。这两种方法都对我有用,但由于我不想在我的应用中添加任何特殊代码,所以我选择了第一种。

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 2015-07-15
      • 2015-03-21
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多