Android 测试布尔方法 returns 每次都为假?

Android test boolean method returns false every time?

我想测试 DesignInputFieldcheckTextLength() 方法 returns 布尔值。但它 returns 每次都是错误的。尝试模拟库来做到这一点。当我写这段代码Mockito.(designInputField.checkTextLength()).thenReturn(true)它returns是真的。但我认为这不是测试这段代码的正确方法。

DesignInputField.kt

 class DesignInputField @JvmOverloads constructor(
        context: Context,
        attrs: AttributeSet? = null,
        defStyleAttr: Int = 0
    ) : ConstraintLayout(context, attrs, defStyleAttr) {
        private var textLength = 1;
        private var textLengthType = 1;
        }
    
      fun checkTextLength(): Boolean {
            return when (textLengthType) {
                0 -> text.length < textLength
                1 -> text.length > textLength
                2 -> text.length <= textLength
                3 -> text.length >= textLength
                4 -> text.length == textLength
                else -> false
            }
        }

DesignInputFieldTest.kt

@RunWith(MockitoJUnitRunner::class)
class DesignInputFieldTest{
    @Mock
    lateinit var designInputField: DesignInputField
  @Test
    fun `cardNameGreaterThanOne`() {
        Mockito.`when`(designInputField.text).thenReturn("ab")
        Assert.assertEquals(true,designInputField.checkTextLength())
}

问题是你在模拟 designInputField,所以它的所有功能都被模拟了,包括 checkTextLength

您可以求助于插桩测试,但在您的情况下,我建议将 checkTextLength 的逻辑提取到辅助顶级函数中并对其进行测试。例如:

fun checkTextLength(type: Int, text: String): Boolean {
    return when (type) {
        0 -> text.length < textLength
        1 -> text.length > textLength
        2 -> text.length <= textLength
        3 -> text.length >= textLength
        4 -> text.length == textLength
        else -> false
    }
}

然后,在DesignInputField中你可以调用它:

fun checkTextLength() = checkTextLength(textLengthType, text)