【发布时间】:2015-05-12 10:06:55
【问题描述】:
我正在使用:
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 时间。第 2 行实际上没有运行任何代码,因此留空(如图所示),但第 3 行和第 4 行都报告被调用 0 次。
另一个例子:
2053 public EntityIntrospector(AdminApp app, EntityApplication entityApp, Class<T> entityClass) {
0 this.app = app;
来自构造函数本身。第一行再次被调用了 2053 次,但第二行(以及构造函数中的所有其他行)被调用了 0 次。
无论如何,我不知道为什么会发生这种情况。
我怀疑可能是另一个库以某种方式干扰了覆盖/仪器。
班级规模可能是一个因素。源文件本身相当大,有 2040 行长(918 行实际代码计入覆盖范围)。
过去几天我一直在编写其他测试和代码,cobertura 对这些工作正常。
欢迎提示和建议。
【问题讨论】:
-
只是一个想法,即使在
mvn clean之后,如果您使用的是 IDE 左右,也可能会有剩余的编译类。干净结帐时的行为是否相同? -
是的,一开始我也想知道,但确实尝试了很多次,但没有任何区别。最后,我认为这是一个班级规模的事情。无论如何,班级都获得了一点“神级”的地位。
-
最后似乎和构造函数中的代码有关。我在下面更新了我的答案,我改变了。
标签: java maven cobertura maven-cobertura-plugin