2017-01-14 9 views
2

JUnit을 사용하여 간단한 단위 테스트()를 작성하고 Spock을 사용하여보다 복잡한 데이터 기반 유닛 테스트 (test/groovy)를 수행하는 project이 있습니다. 나는 이것을 Gradle로 제작했다.JaCoCo가 내 JUnit을보고 Spock 테스트를 무시하는 이유는 무엇입니까?

제 문제는 JaCoCo 보고서를 생성 할 때 JUnit 테스트를 고려하기 때문에 코드 커버리지가 매우 낮습니다. 나는 IntelliJ, Pitest 및 via Gradle에서이 테스트를 모두 잘 수행 할 수 있으며 모든 테스트를 찾아 정확한 라인 범위를보고합니다.

내가 JaCoCo 모두 테스트 프레임 워크를 사용하여 라인의 범위를보고 어떻게합니까

(나는 JaCoCo 내 GitHub의 방패를 설정해야합니다)?

내가 프로젝트에서 src/test/java를 제거하고 ./gradlew clean build jacocoTestReport를 사용하여 JaCoCo 보고서를 생성 할 경우, build/reports/jacoco/test/html/index.html에보고

group 'com.rox' 
version '1.0-SNAPSHOT' 

apply plugin: 'java' 
apply plugin: 'groovy' 
apply plugin: 'jacoco' 
apply plugin: 'info.solidsoft.pitest' 
apply plugin: 'application' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.11' 
    compile group: 'junit', name: 'junit', version: '4.11' 
    compile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' 
    compile group: 'org.spockframework', name: 'spock-core', version: '1.1-groovy-2.4-rc-1' 
} 

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath "info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.1.4" 
    } 
} 

task runDebugUI(type: JavaExec, group: 'run') { 
    classpath sourceSets.main.runtimeClasspath 
    main = mainClassName = 'com.rox.emu.P6502.dbg.UI' 
} 

답변

4

build.gradle 몇 가지 범위를 보여줍니다. src/test/groovy 만 남았 기 때문에 Spock 테스트가 실제로 고려되었다고 결론지었습니다. 적용 할 수없는 유일한 패키지는 com.rox.emu.P6502.dbg.ui이지만 테스트를 거치지 않은 것으로 보입니다.

생성 된 보고서에 적용 범위가 포함되어 있으므로 적용 범위 데이터를 가져 오는 다른 도구에 문제가 있다고 생각합니다. 당신이 "GitHub의 방패"를 언급 한 이후, 나는 그 문제가 https://codecov.io으로 수 있습니다 같은데요 - 당신의 build in Travis states을 :

찾을 수 없습니다 커버리지 보고서.

https://github.com/codecov/example-gradle/blob/master/README.md#add-jacoco-plugin에 따르면 http://docs.codecov.io/docs/supported-languages

방문하십시오 Codecov에 JaCoCo의 통합 JaCoCo XML 보고서의 생성을 필요로한다. 그래서 build.gradle

jacocoTestReport { 
    reports { 
     xml.enabled true 
    } 
} 

를 추가하고 gradlew jacocoTestReport을 실행하는 것을 잊지 마세요.

메모 : JaCoCo 자체는 테스트 프레임 워크와 독립적입니다. JaCoCo Java agent을 사용하여 달성 무엇이 당신의 검사 결과는 단지 JaCoCo에 의해 계측 된 클래스를 실행해야 적용 범위를 얻으려면 :

이 메커니즘은 응용 프로그램 프레임 워크의 독립적 인 클래스 로딩 동안 모든 클래스 파일의 메모리 사전 처리를 할 수 있습니다.

그리고 JaCoCo Gradle 플러그인은 단순히이 에이전트를 사용할 수 있도록 Gradle 작업을 향상시킵니다.

+0

와우, 당신은 정말로 그것에 대해 조사했습니다. 감사. 그것은 나를 위해 오래된 테스트 컴파일을 사용하여 이상한 일을하고있는 것 같아요, 깨끗한, 빌드 테스트 및 다시 실행 보고서를 고정. 감사합니다. –

+0

p.s. GitHub의 코드 범위는 내가 고칠 때까지 사용할 수 없었습니다 :) –

+1

@RossDrew JaCoCo 개발자 중 한 명을 만났습니다.) 특히 재밌는 재생기가 제공되는 경우 도움이되었으므로 기꺼이 도와 드리겠습니다. 해결 된 문제! – Godin