【发布时间】:2017-02-10 10:02:10
【问题描述】:
我正在将一个 Maven 项目迁移到 Gradle,但我的代码覆盖率插件存在问题:Clover。我对覆盖率计算有一个无法解释的行为。举个简单的例子:
// ProjectA
class A
{
void method1()
{
// Some stuff
// This method is covered by a unit test in ProjectA
}
void method2()
{
// Some stuff
// This method is not covered by any unit test in ProjectA
}
}
// ProjectB
class B
{
void method3()
{
new A().method2();
// Some stuff
// This method is covered by a unit test in ProjectB
}
}
我有 2 个不同的项目:ProjectA 和 ProjectB。 ProjectB 依赖于 ProjectA。
ProjectA 包含一个名为 A 的类。来自A 的method1 包含在ProjectA 中的单元测试中。 method2 不包含在 ProjectA 中包含的任何测试中。
ProjectB 包含一个名为 B 的类。来自B 的method3 包含在ProjectB 中的单元测试中。 method3 从 A 类中的 ProjectA 中调用 method2。
事实:
使用 Maven 和 Clover(官方插件),method2 被认为是从单元测试涵盖的方法 (method3) 调用的,即使测试在不同的项目中也是如此。
对于 Gradle 和 Clover (unofficial plugin),method2 被视为未发现,因为在 ProjectA 中没有专门的测试。
配置比较基本,Maven 和 Gradle Clover 插件没有太大区别。
我的问题:
三叶草的正常/默认行为是什么? 可以通过配置设置此行为吗? 或者这是 Gradle Clover 插件中的某种错误?
【问题讨论】:
-
你被三叶草捆绑了吗?在我看来,JaCoCo 优于 clover,因为它可以在不操作类文件的情况下即时检测(使用 java 代理)。这是 gradle 构建的事实标准
-
但动态检测不适用于 Powermock github.com/powermock/powermock/wiki/Code-coverage-with-JaCoCo
-
呵呵...所以也切换到mockito...(半开玩笑,半不是!)
-
也使用 Mockito 但也使用 PowerMockito ;)
标签: java maven gradle code-coverage clover