2

我有一个需要测试的方法:

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)
}

知道如何使用MockitoMockK执行此操作,因此我可以整体测试此方法,而不是在测试中手动创建模式。

4

1 回答 1

1

我相信你可以使用objectMockk,来自 Mockk:

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 中是如何处理的。

于 2018-04-18T14:58:38.940 回答