Chapter6:Gradle幫助自動化測試
6.1 JUnit4 --單元測試
添加只用於測試的依賴:(使用Android Studio創建會幫你自動添加)
dependencies { testImplementation 'junit:junit:4.12' }
testImplementation添加的依賴不會包含在release的APK中;如果在構建類型或product flavor有特定條件,可以只針對該特殊構建添加測試依賴,比如在blue flavor中:
testBlueImplementation 'junit:junit:4.12'
。開始測試:
JUnit測試用例如何編寫不在這裏介紹。
執行 gradle test 命令執行測試。
會在build/reports/tests/XXXX目錄下生成測試報告。
報告內容:
如果只想在某個構建variant上運行測試,只需簡單添加該variant的名稱即可。舉例測試debug variant的命令:gradle testDebug。
一個失敗的測試用例會導致整個test任務失敗,並立即停止整個進程。如果想完整執行整套測試可以使用命令:gradle test -continue。
注意:常規單元測試無法測試含有Android特有的類或資源的部分代碼。(可以使用Robolectric)
6.2 Espresso --功能測試
Google提供的功能測試框架。更多資料參考:官方DOC。
舉例:(MainActivity上面有一個TextView,判斷TextView內容是否是“Hello”)
添加依賴:(注意:功能測試用androidTestImplementation導入依賴)
androidTestImplementation 'androidx.test.ext:junit:1.1.1' //後面兩個Android Studio會自動添加 androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
在androidTest對應包下創建測試:
測試代碼如下:
@RunWith(AndroidJUnit4.class) @LargeTest public class TestingEspressoMainActivityTest { @Rule public ActivityScenarioRule<MainActivity> activityScenarioRule = new ActivityScenarioRule<>(MainActivity.class); @Test public void testHelloWorldShow() { //判斷通過Id找到的控件是否內容是“Hello” onView(withId(R.id.tv_show)).check(matches(withText("Hello"))); } }
執行 gradle connectedCheck 命令執行測試。
在build/reports/androidTests/包下可以讀取到功能測試報告:
注意:Android Studio 測試時不會產生報告。
6.3 測試覆蓋率
瞭解代碼被測試用例覆蓋多少。
Jacoco,內置。啓動:
buildTypes{ debug{ testCoverageEnabled true } }
執行命令 gradle connectedCheck 後會產生覆蓋率報告。
6.4 參考資料
- Gradle For Android