1. 程式人生 > >(翻譯)Android應用生成測試覆蓋率報告

(翻譯)Android應用生成測試覆蓋率報告

對於使用AndroidJUnit4 runner建立的Android整合測試用例,之前一直都沒有發現,一種合適的產生程式碼覆蓋率的方式。我曾經嘗試過很多方式,但是要不就是不奏效,要不就是隻合適我現在已經不再使用的Robolectric測試框架,其他開發者,也漸漸不再新專案中使用這個測試框架了。比如Square的Sqlbrite專案,現在已經開始採用AndroidJUnit4 runner進行他們的專案測試。最近,我在Reddit上面發現了一個有趣的討論,從中我發現了一個不需要額外外掛,指令碼和多行配置就可以簡單生成程式碼覆蓋率的方式,Android SDK 現在已經內建了對 Emma Test Coverage

框架的支援,可以在官方文件中進行查閱。

我們只要做的一件事,就是在 build.gradle 中應用jacoco—android外掛。

apply plugin: 'jacoco-android'

譯者批註

在高版本的SDK中,上述外掛也不需要引用

然後參照如下示例,將 testCoverageEnabled 設定為 true

android {
   buildTypes {
      debug {
         testCoverageEnabled = true
      }
   }
}

為了能生成程式碼覆蓋率報告,我們需要將Android裝置或者模擬器連線到計算機,因為 在生成報告前,會執行 connectedCheck

任務。

之後,我們可以執行如下的命令列

./gradlew createDebugCoverageReport

該任務會分析 /src/main/java/ 路徑下的程式碼和 /src/androidTest/java/ 目錄下單元測試用例。

在執行這個任務之後,我們可以在模組的如下路徑中找到程式碼覆蓋率報告

/build/outputs/reports/coverage/debug/

我們可以在瀏覽器中開啟 index.html 檔案,可以看見視覺化的報告。
同時,在同一級目錄下,我們也可以找到可以供持續整合覆蓋率分析使用的 report.xml 檔案。

除了上面提到的檔案,Gradle也會在如下的路徑建立 coverage.ec

檔案。

/build/outputs/code-coverage/connected/

某些情況下,我們可能需要這些檔案,比如在選擇Jenkins外掛或者別的工具生成程式碼覆蓋率的時候。

下面,你能看見一個 Android 開源專案,Presfer,的程式碼覆蓋率報告。

這是一份由 JaCoCo 程式碼覆蓋率庫生成的報告。

通過分析報告,我增加了部分新的測試用例,小幅度優化了部分程式碼,使得專案的覆蓋率達到了 100%。

為了能在 Jenkins CI 上釋出報告,可以使用程式碼覆蓋率外掛,但是並不能確認外掛的穩定性。另一種解決方案是 HTML Publisher plugin,我們可以增加相應動作,在 Jenkins 的任務中,通過預設的HTML介面產生覆蓋率報告,我認為這是一種非常方便的方式,易於建立,並且方便進行程式碼導航,能定位到沒有覆蓋的程式碼行,方法和分支。

我們可以方便的觀察到Android專案的程式碼覆蓋情況通過這種簡潔快捷的方式,能幫助我們最終發現專案的瓶頸所在,增加應用或者lib庫的整體質量

相關推薦

no