iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0
Mobile Development

【Kotlin Notes And JetPack】Build an App系列 第 28

Day28.【Test】UI Test 的介紹與應用

  • 分享至 

  • xImage
  •  

今天要來寫寫 UI Test,針對不同資料狀態要顯示對應的 UI,我們需要驗證自己的介面是否符合預期中的那樣,以下如有解釋不清或是描述錯誤的地方還請大家多多指教:

什麼?

透過 Espresso 來建立我們的 UI test,設定測試情境並驗證介面是否顯示成預期的樣子,可透果以下方式進行驗證一個文字的顯示:

  • 驗證文字要顯示成 $1,000
onView(withId(R.id.viewId)).check(matches(withText("$1,000")))
  • 驗證頁面是空列表時要顯示圖片
onView(withId(R.id.viewId)).check(matches(not(isDisplayed())))
  • 驗證點擊行為
onView(withId(R.id.viewId)).perform(click())
  • 驗證文字輸入 ABC
onView(withId(R.id.viewId)).perform(typeText("ABC"))
  • 驗證文字輸入 大家好
// 因為 input 沒有支援中文的 typeText 所以要用 replaceText 替代
onView(withId(R.id.viewId)).perform(replaceText("大家好"))

如何?

| Set up

dependency 的部分 Espresso 依樣在專案建立時就已經被配置好了,我們要額外加入以下三個 library

dependencies {
		androidTestImplementation 'com.google.dagger:hilt-android-testing:2.41'
		androidTestImplementation 'androidx.test:rules:1.4.0'
        androidTestImplementation 'androidx.test.ext:junit:1.1.3'
}

| Create Test File

https://ithelp.ithome.com.tw/upload/images/20221012/201511457JxIfJ4sxY.png

@HiltAndroidTest
class MainActivityTest {

    @get:Rule(order = 0)
    var hiltRule = HiltAndroidRule(this)

    @get:Rule(order = 1)
    val activityTestResult = ActivityScenarioRule(MainActivity::class.java)

    @BindValue
    val viewModel: MainViewModel = mockk(relaxed = true)

    private var fakeCityCard = MutableLiveData<Resource<List<CityCard>>>()

    @Before
    fun setUp() {
        hiltRule.inject()
        every { viewModel.cardList } returns fakeCityCard
    }

    @Test
    fun shouldShowEmptyCityCardWhenDataIsSet() {
        fakeCityCard.postValue(Resource.Success(listOf()))
        onView(withId(R.id.emptyState)).check(matches(isDisplayed()))
				onView(withId(R.id.emptyDes)).check(matches(withText("目前沒有東西")))
    }
		...
		
}

Reference

Hilt UI Test


上一篇
Day 27.【Test】Unit Test 的介紹與應用
下一篇
Day 29.【Tracking】Firebase Crashlytics
系列文
【Kotlin Notes And JetPack】Build an App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言