0

我正在尝试为我的撰写功能编写一些测试用例。我有一个最大值为 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")
    }

但是虽然我可以看到输入是正确的,但测试失败了,而且 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)
                )

最大长度在视图模型中处理。如果用户添加的字符数超过 16 个,视图模型将不会更新状态并保留旧值。

4

1 回答 1

0

好的,问题仍然存在,但我以另一种方式实现了我想要的。我使用语义节点来获取编辑文本中的内容,并将其与应有的内容进行比较:

    @Test
    fun checkMaxTaxCodeLength_16Character() {
        val taxCode = composeRule.onNodeWithTag(testTag = AUTHENTICATION_SCREEN_TAX_CODE_EDIT_TEXT)
        for (i in 'A'..'Z')
            taxCode.performTextInput(i.toString())
        for ((key,value) in taxCode.fetchSemanticsNode().config)
            if (key.name =="EditableText")
                assertEquals("ABCDEFGHIJKLMNOP",value.toString())
    }
于 2022-02-15T15:15:16.137 回答