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事件中内置的许多应用程序中看到很多逻辑