我正在将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
}
}
我有两个不同的项目:ProjectA
和ProjectB
。 ProjectB
取决于ProjectA
。
ProjectA
包含一个名为A
的类。来自method1
的{{1}}由A
中包含的单元测试涵盖。 ProjectA
中包含的任何测试均未涵盖method2
。
ProjectA
包含一个名为ProjectB
的类。来自B
的{{1}}由method3
中包含的单元测试涵盖。 B
来自ProjectB
中的method3
个小组method2
。{/ 1}
事实:
使用Maven和Clover(官方插件),A
被认为是由单元测试覆盖的方法(ProjectA
)调用,即使测试是在不同的项目中。
使用Gradle和Clover(unofficial plugin)时,method2
被视为未被发现,因为method3
中没有专门的测试。
配置是基本的,Maven和Gradle Clover插件之间没有重大区别。
我的问题:
Clover的正常/默认行为是什么? 可以通过配置设置此行为吗? 或者这是Gradle Clover插件中的某种错误?
答案 0 :(得分:2)
既然我们已经获得了乐趣并且排除了JaCoCo,我认为您需要提供带有additional source dirs的三叶草
例如:
apply plugin: 'com.bmuschko.clover'
evaluationDependsOn ':someOtherProject'
clover {
additionalSourceDirs = project(':someOtherProject').sourceSets.main.allSource.srcDirs
}