2017-02-10 2 views
1

Maven 프로젝트를 Gradle로 마이그레이션 할 때 코드 커버리지 플러그인 Clover에 문제가 있습니다. 나는 커버리지 계산에 대해 설명 할 수없는 행동을한다. 간단한 예를 보자 : ProjectAProjectB : 나는 2 개의 다른 프로젝트를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 
    } 
} 

. ProjectBProjectA에 따라 다릅니다.

ProjectA에는 A이라는 클래스가 있습니다. 에서 얻은 단위 테스트는 ProjectA에 포함되어 있습니다. method2ProjectA에 포함 된 테스트가 적용되지 않습니다.

ProjectB에는 B이라는 클래스가 있습니다. B에서 method3ProjectB에 포함 된 단위 테스트가 적용됩니다. method3A 클래스의 method2ProjectA에 호출합니다.

사실 : 메이븐와 클로버 (공식 플러그인)와

,이 호출이 테스트가 다른 프로젝트에있는 경우에도 단위 테스트에 포함하는 방법 (method3) 출신으로 method2이 포함 된 것으로 간주한다. ProjectA에는 전용 테스트가 없으므로 Gradle and Clover (unofficial plugin)를 사용하면 method2이 발견 된 것입니다.

Maven과 Gradle Clover Plugin 사이의 구성에는 차이가 없습니다.

내 질문 :

클로버의 정상적인/기본 동작은 무엇입니까? 구성을 통해이 동작을 설정할 수 있습니까? 아니면 Gradle Clover 플러그인에 이런 종류의 버그가 있습니까?

+0

는 클로버에 묶여 있는가? 내 의견으로는 [JaCoCo] (https://docs.gradle.org/current/userguide/jacoco_plugin.html)는 클래스 파일을 조작하지 않고도 (자바 에이전트를 사용하여) 즉석에서 악기를 연주하기 때문에 클로버보다 우수합니다. 그래 플 빌드를위한 사실상의 표준입니다. –

+0

하지만 Powermock에서는 작동하지 않는 계측이 작동하지 않습니다. https://github.com/powermock/powermock/wiki/Code-coverage-with-JaCoCo – ToYonos

+0

Hehe ... so switch [mockito] (http://site.mockito.org) 너무 ... (반 농담, 반나절!) –

답변

2

지금 우리가 길에서 재미있어하고 JaCoCo을 배제으니, 나는 당신이 additional source dirs

예와 클로버를 제공해야합니다 생각 :

apply plugin: 'com.bmuschko.clover' 

evaluationDependsOn ':someOtherProject'  
clover { 
    additionalSourceDirs = project(':someOtherProject').sourceSets.main.allSource.srcDirs 
} 
+0

흥미로운 아이디어. 나는 그것을 시험하고 너에게 돌아갈 것이다. – ToYonos

+0

답변에 문제가 발생했습니다. '재산을 찾을 수 없습니다'라는 sourceSets 문제가이 질문과 관련되어 있습니다. http://stackoverflow.com/questions/15347364/gradle-multiproject-gives-could-not-find -property-sourcesets-on-project-erro 어쨌든, 나는'ProjectA'의 경로를 하드 코드하여 (임시적으로 테스트를 위해) 작동했습니다! 프로젝트의 루트에있는 내 clover.xml 파일이 적절한 범위로 채워졌습니다. 이 sourceSet 문제는 ​​알아야하지만 초기 문제는 해결되었습니다. 고맙습니다. – ToYonos

+0

'evaluationDependsOn'을 포함하도록 내 답변이 업데이트되었습니다. someOtherProject'' –