【问题标题】:Method isDigitsOnly in android.text.TextUtils not mocked Errorandroid.text.TextUtils 中的方法 isDigitsOnly 未模拟错误
【发布时间】:2023-01-14 03:38:21
【问题描述】:

我创建了一个验证用例,其中我使用内部使用 TextUtils 的 isDigitsOnly 验证输入。

override fun isDigitsOnly(size: String): Boolean {
    return !size.trim().isDigitsOnly()
}

当我尝试测试它时,出现了这个错误

android.text.TextUtils 中的方法 isDigitsOnly 未被模拟

有谁知道我如何在我的测试类中模拟 textUtils

@RunWith(MockitoJUnitRunner::class)
class ValidationInputImplTest {

    @Mock
    private lateinit var mMockTextUtils: TextUtils

    private lateinit var validationInputImpl: ValidationInputImpl

    @Before
    fun setUp() {
        validationInputImpl = ValidationInputImpl()
    }

    @Test
    fun `contains only digits, returns success`() {
        val input = "66"
        val result = validationInputImpl(input)
        assertTrue(result is ValidationResult.Success)
    }

}

【问题讨论】:

标签: android kotlin junit mockito mockito-kotlin


【解决方案1】:

在撰写答案时,您不能这样做。因为您看到的 android 代码不是实际代码。您不能为此创建单元测试。 android.jar中方法的默认实现是throw exception

您可以做的一件事是,在 build.gradle 文件中添加以下内容。 但它使 android 类不抛出异常。但它总是会返回默认值。所以测试结果可能实际上不起作用。严格不推荐。

android {
  testOptions { 
    unitTests.returnDefaultValues = true
  }
}

更好的方法是从 android source 复制代码并将文件粘贴到 src/test/java 文件夹下,包名称为 android.text

Link to Answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多