繁体   English   中英

Maven Cobertura插件生成不完整的覆盖率报告

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM