![](/img/trans.png)
[英]How to view HTML coverage report using Cobertura Maven plugin?
[英]Maven Cobertura plugin generating incomplete coverage report
我正在使用:
mvn cobertura:cobertura
生成项目的覆盖率报告。 这实际上没有在pom.xml文件中配置,因此它仅使用插件的最新版本(当前为2.6)。
在大多数情况下,这都可以,但是由于某种原因,一个班级的报告非常奇怪。 似乎在报告某些行已被覆盖,但其他行(在其旁边)却未被覆盖。
我一直在跑步:
mvn clean
当然,但这似乎无济于事。
总体而言,它仅报告约1%的覆盖率,但这实际上是一个相当重要的类,我知道它已经被大量使用。 我也知道这些报告过去工作正常。 我不确定他们什么时候停止工作,因为我已经有一段时间没有检查过该课程了。
作为我所看到的一个例子:
2053 private final List<EntityProperty<T>> properties = new ArrayList<EntityProperty<T>>();
private final PropertyDescriptor idProperty;
0 private final Set<String> fieldOrder = new LinkedHashSet<String>();
0 private final Map<String, String> additionalFieldLabels = new HashMap<String, String>();
这是来自该类的初始化程序的。 第一行显然称为2053年时间。 第二行实际上没有运行任何代码,因此留为空白(如所示),但是第三行和第四行均报告被调用0次。
另一个例子:
2053 public EntityIntrospector(AdminApp app, EntityApplication entityApp, Class<T> entityClass) {
0 this.app = app;
来自构造函数本身。 同样,第一行被调用2053次,但是第二行(以及构造函数中的所有其他行)被调用0次。
无论如何,我不知道为什么会这样。
我怀疑这可能是另一个以某种方式干扰覆盖范围/仪器的图书馆。
可能是班级人数可能是一个因素。 源文件本身的重量很长,为2040行(918条实际代码行计入覆盖范围)。
在过去的几天中,我一直在编写其他测试和代码,而cobertura对此工作正常。
欢迎提示和建议。
因此看来班级似乎太大了。 我在有关的班级砍掉了一些台词。 这显然使整个测试失败,但是覆盖率现在似乎又可以正常工作了。
现在该类的长度为804行(就可以覆盖的行而言)。
因此,对于cobertura类可以处理的大小,似乎存在某种有效的限制。
在我的情况下,这可能意味着该类可以进行重构以使代码破裂。
更新(2015年6月3日):我将相关类重构到790行,但仍然存在相同的问题。 最后,问题似乎与构造函数中的代码有关。 我有类似的东西:
try {
final BeanInfo beanInfo = Introspector.getBeanInfo(entityClass);
// rest of constructor here (about 50 lines)
}
catch( IntrospectionException ie ) {
throw new RuntimeException(ie);
}
我将其更改为具有以下方法:
protected BeanInfo getBeanInfo(Class<T> entityClass) {
try {
return Introspector.getBeanInfo(entityClass);
}
catch( IntrospectionException ie ) {
throw new RuntimeException(ie);
}
}
而是从构造函数内部调用的。 这样,我知道不再需要构造函数内部的try / catch了。
我不是100%确定这是否通过缩短构造函数的长度来解决问题,或者是否通过移动try / catch来解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.