2016-04-11 70 views
1

沒有使用JaCoCo,有沒有一種方法可以通過Gradle命令在我的測試上運行代碼覆蓋率?似乎沒有一個運行覆蓋測試的Gradle任務。我看到的唯一選項是Android Studio用戶界面上的一個按鈕,它將運行我的代碼覆蓋測試。通過Gradle命令運行Android代碼覆蓋測試

理想情況下,我想使用代碼覆蓋率從命令行自動化測試,並訪問它生成的報告。

順便說一句,我對JaCoCo沒有任何反對意見。我只想知道是否有一種方法可以在不使用庫的情況下執行此操作。

編輯:Possibly related but didn't the solution did not work for me - testDebug不是我的任務。

編輯2:Google Issue Tracker這似乎與我的問題有關。一年前開放。

編輯3:似乎在嘗試使用Jacoco時這也是一個問題......似乎沒有任何由jacoco提供的gradle任務在我的研究中在src/test目錄中進行單元測試。願意被證明是錯誤的!

回答

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文件中,該文件也需要定義。

畢竟說完了之後,我現在可以通過命令行獲得單元測試的代碼覆蓋範圍,與我的測試測試分開進行。

相關問題