今年的疫情蛮严重的,希望大家都过得安好,
希望疫情快点过去,能回到一些线下技术聚会的时光~
今天目标:了解 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如何存取中文
演算法评估 ### 演算法衡量 效率 渐进符号 EX:O(n) 最差案例 平均案例 平摊分析 问题衡...
上午: Python程序设计 老师此次课程教学for回圈, List comprehension, ...
layout 属性 我们可以使用 layout 属性来套用放置於 layouts 的布局。 expo...
昨天介绍完DBSCAN演算法,今天就要来写DBSCAN程序: 首先利用昨天创建好资料 首先先设置r ...
前言 被Netflix fixation了,差点忘记发文 正文 概念 CWE-384 Authent...