Mockito EditText 在单元测试中设置并获取值



我想测试我的validator,它有很多接受EditText作为参数的方法。问题是我无法正确设置文本值EditText这是我所做的

val emailTxt = mock(SpannableStringBuilder("test@gmail.com")::class.java)
`when`(emailField.text).thenReturn(emailTxt)
validator.checkEmail(emailField)

但这是我得到的价值

mock for spannablestringbuilder, hashcode: 2069466373

而不是test@gmail.com

我尝试过的另一件事是

`when`(emailField.getText()).thenReturn(Editable.Factory.getInstance().newEditable("test@gmail.com"))

但是后来我得到了这个java.lang.RuntimeException: Method getInstance in android.text.Editable$Factory not mocked所以有人有解决这个问题的方法吗?

我认为你最好的选择是重构,以便你传递一个包含EditText文本的String,而不是EditText本身来validator.checkEmail()。验证逻辑不应该真正依赖于特定于 Android 的代码。

最新更新