我有一种方法需要测试:

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/

10-09 12:49