【问题标题】:How to mock android.util.Patterns with Mockito or MockK如何使用 Mockito 或 MockK 模拟 android.util.Patterns
【发布时间】:2018-04-18 14:39:16
【问题描述】:

我有一个方法需要测试:

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 来做到这一点,这样我就可以整体测试这个方法,而不是在测试中手动创建模式。

【问题讨论】:

    标签: android kotlin mockito powermock mockk


    【解决方案1】:

    我相信你可以使用来自 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 中是如何处理的。

    【讨论】:

      猜你喜欢
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多