我有一种方法需要测试:
fun validate(email: String): Result {
return if (android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
Result(true)
} else {
Result(false, "error")
}
}
但它会返回nullpointerException错误,因为需要模拟Patterns.email。
现在,我手动创建并测试了Pattern,但是无法测试上述方法。
object Patterns {
private const val EMAIL_PATTERN = ("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$")
val EMAIL_ADDRESS: Pattern = Pattern.compile(EMAIL_PATTERN)
}
任何想法如何使用 mock 或 mock 来做到这一点,所以我可以整体测试此方法,而不是在测试中手动创建模式。
最佳答案
我相信您可以使用Mockk的objectMockk
:
objectMockk(Patterns.EMAIL_ADDRESS).use {
every { Patterns.EMAIL_ADDRESS.matcher(email).matches() } returns true
//Code that uses the mock here
}
您将模拟常量字段
Patterns.EMAIL_ADDRESS
,然后模拟要在matcher(email).matches()
方法上返回的内容。我相信这足以满足您的用例,但是我不确定在Android中如何处理此库。
关于android - 如何使用Mockito或MockK模拟util.Patterns,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49902569/