Day 24 Compose UI Test

Teng Wang
Sep 29, 2021

--

2021 鐵人賽 一天一腳步,30天學會 Android Compose UI!

今年的疫情蠻嚴重的,希望大家都過得安好,希望疫情快點過去,能回到一些線下技術聚會的時光~

今天目標:了解 Compose UI 怎麼寫測試

很多時候,我們希望有個自動化測試的工具,

幫助我們減少重複性的確認,讓程式釋出時的品質更加提升,但是要怎麼開始呢?就是今天了。

本文範例完全參照影片去執行,想要看影片學習的人也可以直接連過去看~

https://www.youtube.com/watch?v=kdwofTaEHrs&ab_channel=AndroidDevelopers

首先要先確認你的專案有引入這兩個 Library

// Test rules and transitive dependencies:
androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
// Needed for createComposeRule, but not createAndroidComposeRule:
debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

然後回到我們的 Day 11

然後把它改成一個Button跟一個 TextView,點擊按鈕後TextView的 Count 會加一

執行起來就是一個會不斷將 Click count 增加的 按鈕。

接著我們要對這個畫面做測試,所以我們要切到 androidTest 這個資料夾裡面

然後照著影片中的範例,寫成這樣的程式。

@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()
// 宣告這是一個 AndroidCompose 的測試,createAndroidComposeRule裡面是什麼有機會再深入討論
@Test
fun counter_initially_zero(){
val text = composeTestRule.activity.getString(R.string.click_count,0)
composeTestRule.onNodeWithText(text = text).assertExists()
}
// 測試 composeTestRule 的 actiivty 這個畫面執行起來後有沒有指定好的文字 (Clicks: 0)
@Test
fun clickButton_incrementCounter(){
val textIncrement = composeTestRule.activity.getString(R.string.increment_counter)
composeTestRule.onNodeWithText(textIncrement).performClick()
val textClicks = composeTestRule.activity.getString(R.string.click_count,1)
composeTestRule.onNodeWithText(textClicks).assertExists()
}
// 測試 composeTestRule 的 actiivty 這個畫面執行起來後有沒有指定的按鈕,有的話就點擊。
// 然後再比對有沒有點擊過後的 指定好的文字 (Clicks: 1)
}

如果今天你要測試你的畫面有沒有依照你想的變化,這是一個最基礎的按鈕跟文字變化的測試。

很多的變化都是從這裡開始,如果有理解的話!

恭喜,明天見!

附上目前的 Testing cheat sheet

參考資料:

本文同步發表在 iT邦幫忙 上 文章連結

--

--