2017-01-14 8 views
2

私はprojectで、JUnitを使用して単純な単体テスト()を作成し、Spockを使用してより複雑なデータ駆動単体テスト(test/groovy)を作成しました。私はGradleですべてをビルドします。JaCoCoが私のJUnitを見るのはなぜですか?私のSpockテストは無視されますか?

私の問題は、JaCoCoレポートを生成すると、JUnitテストだけを考慮しているように見えるため、コードカバレッジが非常に低くなることです。 IntelliJ、Pitest、Gradleでこれらのテストをまとめて実行すると、すべてのテストが見つかって正しいラインカバレッジが報告されます。

私はJaCoCoは、両方のテストフレームワークを使用したラインカバレッジを報告してもらうにはどうすればよい

(私はJaCoCoが私のGitHubシールドを設定する必要がありますか)?

build.gradle

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/reports/jacoco/test/html/index.htmlに報告し、その後、プロジェクトからsrc/test/javaを削除し、./gradlew clean build jacocoTestReportを使用してJaCoCoレポートを生成する場合、いくつかの適用範囲を示しています。 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

関連する問題