我们针对完全部署的Java Web应用程序(除了单元测试)进行了大量自动化测试,并希望跟踪这些测试的代码覆盖率。该应用程序是用Java编写的,可以在Tomcat上运行。我们目前使用Cobertura来跟踪我们的单元测试的覆盖范围,所以我想坚持使用Cobertura。我已经对我们的战争进行了检测,并且能够从coberura.ser文件生成报告,但它始终显示0%的覆盖率。
以下是我要遵循的步骤:
- 在正常过程中构建jar并进行战争(无需仪表)。我们的应用程序类被打包到一个jar文件中,然后放在我们部署的战争的lib主管中。
- 解包jar和战争
- 重新重建,但这次是对班级进行修改。
- 将已检测的类复制到解压缩的jar目录中。我这样做是因为仪器似乎没有为没有可运行代码(如接口)的东西输出类文件。
- 从解压缩的jar目录
构建jar
- 将新的已检测jar和cobertura.jar添加到解压缩的war目录的lib目录中,并从中构建一个war。
- 将新的检测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之后使用.ser文件生成报告,但是在我停止Tomcat之前,这也没有用。
我错过了什么吗?知道为什么Cobertura总是说0%的覆盖率?
提前致谢。