2016-04-11 26 views
1

JaCoCoを使用しないと、Gradleコマンドによるテストでコードカバレッジを実行する方法はありますか?カバレッジのあるテストを実行するGradleタスクはありません。私が見る唯一のオプションは、コード範囲でテストを実行するAndroid Studio UIのボタンです。Gradleコマンドでコードカバレッジを使用してAndroidテストを実行する

理想的には、コマンドラインからコードカバレッジを使用してテストを自動化し、生成したレポートにアクセスしたいと考えています。

ところで、私はJaCoCoに対して何も持っていません。私はちょうどライブラリを使用せずにこれを行う方法があるかどうかを知りたい。

編集:Possibly related but didn't the solution did not work for me - testDebugは私の仕事ではありません。

編集2:Google Issue Tracker私の質問に関連しているようです。 1年以上前にオープンしました。

編集3:Jacocoを使用しようとすると問題が発生するようです...私の研究からsrc/testディレクトリのユニットテストを行うためにjacocoが提供するgradleタスクはありません。間違っていることが大好きです!

答えて

1

Gradleの仕組みや、hereなどのいくつかの例のおかげで、私はこの問題を解決できました。このgithubプロジェクトhereから。私は私のプロジェクトでそれを動作させるためにいくつか調整が必要でしたが、その結果、コマンドラインからsrc/test /ディレクトリにある私のユニットテストだけでコードカバレッジを実行し、生成されたレポートにアクセスできます。ここで

は、タスクが私のbuild.gradleで次のようになります。私が作るために必要な

task jacocoReport(type: JacocoReport, dependsOn: 'testMockDebugUnitTest') { 
    group = 'Reporting' 
    description = 'Generate Jacoco coverage reports after running tests.' 

    reports { 
     xml.enabled = true 
     html.enabled = true 
    } 

    classDirectories = fileTree(
      dir: 'build/intermediates/classes/test/mock/debug', 
      excludes: [ 
        '**/R*.class', 
        '**/BuildConfig*' 
      ] 
    ) 

    sourceDirectories = files('src/main/java') 
    executionData = files('build/jacoco/testMockDebugUnitTest.exec') 

    doFirst { 
     files('build/intermediates/classes/test/mock/debug').getFiles().each { file -> 
      if (file.name.contains('$$')) { 
       file.renameTo(file.path.replace('$$', '$')) 
      } 
     } 
    } 
} 

変更:一人で私のユニットテストを実行するにはGradleのタスクtestMockDebugUnitTest、及び頼るために必要なjacocoReportタスクによって行われます私のユニットテストが最初に完了しました。私のために生成されたビルドツリーは少し異なりますので、私はそれをハードコードしました。Jacocoが依存する実行データは、testMockDebugUnitTestタスクによって生成された.execファイルにもあります。

結局のところ、私は単体テストのコードカバレッジを、私のインストルメンテーションテストとは別にコマンドラインで得ることができます。

関連する問題