Android 如何使用Robolectric触发文本编辑的失焦事件?

Android 如何使用Robolectric触发文本编辑的失焦事件?,android,testing,kotlin,robolectric,Android,Testing,Kotlin,Robolectric,我在屏幕上有两个文本编辑。它们都有一个OnFocusChangeListener,它会检查字段中的文本,如果文本为空,它会将error属性设置为错误消息。它根据我的特别测试工作 但我不知道如何使用robololectric验证这一点?我试过这个: @RunWith(RobolectricTestRunner::class) class AuthLogDetailActivityUITest { @Test fun should_show_error_when_no_text_in

我在屏幕上有两个文本编辑。它们都有一个
OnFocusChangeListener
,它会检查字段中的文本,如果文本为空,它会将
error
属性设置为错误消息。它根据我的特别测试工作

但我不知道如何使用
robololectric
验证这一点?我试过这个:

@RunWith(RobolectricTestRunner::class)
class AuthLogDetailActivityUITest {
    @Test
    fun should_show_error_when_no_text_input_when_textInput_lost_focus() {
        val logDetailsActivity = Robolectric.setupActivity(AuthLogDetailsActivity::class.java)

        val quickNameTextEdit = logDetailsActivity.findViewById<TextInputEditText>(R.id.loginDetails_textEdit_quickName)
        val passwordTextEdit = logDetailsActivity.findViewById<TextInputEditText>(R.id.loginDetails_textEdit_password)

        quickNameTextEdit.performClick()
        passwordTextEdit.performClick()

        assertNotNull(quickNameTextEdit.error)
    }
}
@RunWith(RobolectrictTestRunner::class)
类AuthLogDetailActivityUITest{
@试验
乐趣应该在没有文本输入时显示错误{
val logDetailsActivity=Robolectric.setupActivity(AuthLogDetailsActivity::class.java)
val quickNameTextEdit=logDetailsActivity.findViewById(R.id.loginDetails\u textEdit\u quickName)
val passwordTextEdit=logDetailsActivity.findViewById(R.id.loginDetails\u textEdit\u password)
quickNameTextEdit.performClick()
passwordTextEdit.performClick()
assertNotNull(quickNameTextEdit.error)
}
}
我试着模拟现实世界,用户只需点击文本,一个接一个地编辑,而无需输入任何内容

但在现实世界中,只要用户单击
密码文本编辑
quickNameTextEdit
就会显示错误消息

但是测试总是会失败,因为
quickNameTextEdit.error
为空


我认为这不是触发
onFocusChange
事件的方式。测试这种行为的
Robolectric
方法是什么?

我能够通过使用
.performAccessibilityAction(ACTION\u FOCUS,Bundle())
触发我的
OnFocusChangeListener
。希望这能解决你的问题。您的示例如下所示:

@RunWith(RobolectricTestRunner::class)
class AuthLogDetailActivityUITest {
    @Test
    fun should_show_error_when_no_text_input_when_textInput_lost_focus() {
        val logDetailsActivity = Robolectric.setupActivity(AuthLogDetailsActivity::class.java)

        val quickNameTextEdit = logDetailsActivity.findViewById<TextInputEditText>(R.id.loginDetails_textEdit_quickName)
        val passwordTextEdit = logDetailsActivity.findViewById<TextInputEditText>(R.id.loginDetails_textEdit_password)

        quickNameTextEdit.performAccessibilityAction(ACTION_FOCUS, Bundle())
        passwordTextEdit.performAccessibilityAction(ACTION_FOCUS, Bundle())

        assertNotNull(quickNameTextEdit.error)
    }
}
@RunWith(RobolectrictTestRunner::class)
类AuthLogDetailActivityUITest{
@试验
乐趣应该在没有文本输入时显示错误{
val logDetailsActivity=Robolectric.setupActivity(AuthLogDetailsActivity::class.java)
val quickNameTextEdit=logDetailsActivity.findViewById(R.id.loginDetails\u textEdit\u quickName)
val passwordTextEdit=logDetailsActivity.findViewById(R.id.loginDetails\u textEdit\u password)
quickNameTextEdit.performAccessibilityAction(操作\u焦点,Bundle())
passwordTextEdit.performAccessibilityAction(操作\u焦点,Bundle())
assertNotNull(quickNameTextEdit.error)
}
}

你发现了吗?如果是这样的话,如果你能回答自己的问题,那就太好了question@HuwDavies没有,而且在他们的github回购协议中也没有得到回答。我最终选择用浓缩咖啡测试用户界面,并对其他部分进行单元测试来完成这项工作。真可惜@HuwDavies很遗憾。机器人迷甚至两次否决了这个问题。我想知道为什么。但似乎我并不孤单。所以现在它获得了两张选票。我认为它作为一个功能是非常有价值的。我可以在onLossFocus事件中内置的许多应用程序中看到很多逻辑