我正在将Maven项目迁移到Gradle,并且我的代码覆盖率插件存在问题:Clover。我有一个关于覆盖计算的无法解释的行为。让我们举一个简单的例子:Maven和Gradle之间的三叶草代码覆盖行为不同
// 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
的类。 method1
from A
由ProjectA
中包含的单元测试覆盖。不包含在ProjectA
中包含的任何测试中。
ProjectB
包含一个名为B
的类。 来自B
由包含在ProjectB
中的单元测试覆盖。 method3
在ProjectA
中从类A
调用method2
。
事实:
与Maven与四叶草(官方插件),method2
被认为覆盖,因为它的呼叫从一个单元测试覆盖的方法(method3
),即使测试是在一个不同的项目。 随着Gradle和Clover(unofficial plugin),method2
被认为是未发现的,因为ProjectA
中没有专门的测试。
该配置是基本的,Maven和Gradle Clover插件没有太大区别。
我的问题:
Clover的正常/默认行为是什么? 可以通过配置设置此行为吗? 或者这是Gradle Clover插件中的某种错误?
你绑三叶草?在我看来,[JaCoCo](https://docs.gradle.org/current/userguide/jacoco_plugin.html)优于三叶草,因为它可以在不使用类文件的情况下即时使用(使用java代理)。它是gradle版本的事实上的标准 –
但动态检测不适用于Powermock https://github.com/powermock/powermock/wiki/Code-coverage-with-JaCoCo – ToYonos
呵呵...所以切换到[mockito](http://site.mockito.org)那么...(半开玩笑,一半不!) –