我在屏幕上有2个TextEdits。它们都有OnFocusChangeListener
,它会检查字段中的文本,如果它为空,则会将error
属性设置为错误消息。它根据我的临时测试工作。
但我不知道如何使用Robolectric
验证这一点?我试过这个:
@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)
}
}
我试图模仿现实世界,用户只需逐个点击文本编辑而不输入任何内容。
但在现实世界中,只要用户点击passwordTextEdit
,quickNameTextEdit
就会显示错误消息。
但是测试将始终失败,因为quickNameTextEdit.error
为空。
我认为这不是触发onFocusChange
事件的方法。测试此行为的Robolectric
方式是什么?
答案 0 :(得分:1)
我可以使用OnFocusChangeListener
来触发.performAccessibilityAction(ACTION_FOCUS, Bundle())
。希望这可以解决您的问题。您的示例如下所示:
@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)
}
}