如何使用Mockito或MockK模拟util.Patterns

时间:2018-04-18 14:39:17

标签: android kotlin mockito powermock mockk

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

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)

}

但它返回nullpointerException错误,因为Patterns.email需要被模拟。 现在我手动创建并测试模式,但无法测试上面的方法。

widget.created

任何想法如何使用mockito或mockk这样做,所以我可以测试整个方法,而不是在测试中手动创建模式。

1 个答案:

答案 0 :(得分: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中处理这个lib。