Day 24 Compose UI Test

今年的疫情蛮严重的,希望大家都过得安好,
希望疫情快点过去,能回到一些线下技术聚会的时光~

今天目标:了解 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
参考资料:
https://developer.android.com/jetpack/compose/testing
https://developer.android.com/codelabs/jetpack-compose-testing#0
https://www.youtube.com/watch?v=kdwofTaEHrs&ab_channel=AndroidDevelopers
https://developer.android.com/jetpack/compose/testing-cheatsheet

本文同步发表在 Medium 上 文章连结


<<:  [Day 18] 第一主餐 pt.10-中文资料存料至文中,django如何存取中文

>>:  DAY29 进行式--工作日志004

【演算法】L1 演算法评估

演算法评估 ### 演算法衡量 效率 渐进符号 EX:O(n) 最差案例 平均案例 平摊分析 问题衡...

Day9 职训(机器学习与资料分析工程师培训班): python、 php结合highchart

上午: Python程序设计 老师此次课程教学for回圈, List comprehension, ...

DAY5 起手式--Nuxt.js(细)说pages(下)

layout 属性 我们可以使用 layout 属性来套用放置於 layouts 的布局。 expo...

DAY21聚类演算法(DBSCAN)

昨天介绍完DBSCAN演算法,今天就要来写DBSCAN程序: 首先利用昨天创建好资料 首先先设置r ...

[Day23] Session fixation

前言 被Netflix fixation了,差点忘记发文 正文 概念 CWE-384 Authent...