Moh*_*mad 4 testing android android-jetpack-compose android-jetpack-compose-testing
我正在尝试为我的撰写功能编写一些测试用例。我有一个轮廓文本字段,最大值为 16 个字符。所以我想测试一下这个功能。这是测试:
@Test
fun checkMaxTaxCodeLength_16Character() {
val taxCode = composeRule.onNodeWithTag(testTag = AUTHENTICATION_SCREEN_TAX_CODE_EDIT_TEXT)
for (i in 'A'..'Z')
taxCode.performTextInput(i.toString())
taxCode.assertTextEquals("ABCDEFGHIJKLMNOP")
}
Run Code Online (Sandbox Code Playgroud)
但是,虽然我可以看到输入是正确的,但测试失败,并且似乎assertTextEquals无法正常工作。所以:
这是文本字段的代码:
OutlinedTextField(
value = state.taxCode,
maxLines = 1,
onValueChange = { string ->
viewModel.onEvent(
AuthenticationEvent.TaxCodeChanged(string)
)
},
label = {
Text(text = stringResource(id = R.string.tax_code))
},
modifier = Modifier
.fillMaxWidth()
.testTag(TestingConstant.AUTHENTICATION_SCREEN_TAX_CODE_EDIT_TEXT)
)
Run Code Online (Sandbox Code Playgroud)
最大长度在视图模型中处理。如果用户添加的字符超过 16 个,视图模型将不会更新状态并保留旧值。
首先,我做错了什么?
assertTextEquals()Text获取语义节点中和的值EditableText,将它们组合起来,然后检查您传入的值。顺序并不重要,只需确保将 的值作为Text参数之一传入即可。
val mNode = composeTestRule.onNodeWithText("Email"))
mNode.performTextInput("test@mail.com")
mNode.assertTextEquals("Email", "test@mail.com")
Run Code Online (Sandbox Code Playgroud)
请注意,文本Email是文本字段可组合项的标签。
要获取有关节点的语义信息,您可以
val mNode = composeTestRule.onNodeWithText("Email"))
mNode.performTextInput("test@mail.com")
mNode.assertTextEquals("Email", "test@mail.com")
Run Code Online (Sandbox Code Playgroud)
对于 ,TAG您可以使用任何字符串。运行上述测试后,您可以使用指定的 .logcat 搜索TAG。你应该看到类似的东西
@Test
fun print_semantics_tree() {
composeTestRule.onRoot(useUnmergedTree = true).printToLog(TAG)
}
Run Code Online (Sandbox Code Playgroud)
请注意,您还可以通过索引操作获取语义节点对象,而不是迭代所有值。
|-Node #3 at (l=155.0, t=105.0, r=925.0, b=259.0)px
| Focused = 'false'
| ImeAction = 'Default'
| EditableText = 'test@mail.com'
| TextSelectionRange = 'TextRange(0, 0)'
| Text = '[Email]'
| Actions = [RequestFocus, GetTextLayoutResult, SetText, SetSelection,
OnClick, OnLongClick, PasteText]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3015 次 |
| 最近记录: |