Android 测试布尔方法 returns 每次都为假?
Android test boolean method returns false every time?
我想测试 DesignInputField
的 checkTextLength()
方法 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)
我想测试 DesignInputField
的 checkTextLength()
方法 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)