无法使用模拟或不使用模拟在Kotlin中测试此dataClass

3

除了cardNumber和termsAndCondition之外,它成功通过了。这两个返回了null。在测试期间如何返回真值?(我没有删除一些注释以显示我已经尝试过的代码。)

NewCardValidation.kt

data class NewCreditCardValidation(
    var cardNumber: MasterPassEditText? = null,
    var termsAndCondition: CompoundButton? = null,
    var cardMonth: Int? = null,
    var cardYear: Int? = null,
    var cardName: String? = null
) {
    val isValid: Boolean
        get() = when {
            cardNumber?.isEmpty == true -> false
            termsAndCondition?.isChecked == false -> false
            cardMonth == null -> false
            cardYear == null -> false
            cardName.isNullOrBlank() -> false
            else -> true
        }
}

NewCardValidationTest.kt

@RunWith(MockitoJUnitRunner::class)
class NewCreditCardValidationTest{
    private val newCardValidation = NewCreditCardValidation()
    @Test
    fun `Check cardValidation is valid`(){
        newCardValidation.cardNumber?.setText("4111111111111111")
      //  Mockito.`when`(newCardValidation.termsAndCondition?.isChecked).thenReturn(true)
        newCardValidation.termsAndCondition?.isChecked = true
       // doReturn(true).`when`(newCardValidation.termsAndCondition?.isChecked)
        newCardValidation.cardMonth = 10
        newCardValidation.cardYear = 2023
        newCardValidation.cardName = "mycard"
        Truth.assertThat(newCardValidation.isValid).isTrue()
    }
}
1个回答

0
因为isValid是一个val,所以它在类实例化时创建。将其更改为函数,它将每次计算,包括对变量的更改。

不,这不是问题。我可以传递所有其他值并返回结果。但是,这两个传递了“null”。不能传递true或false。此外,在进行测试时,我不想更改任何内容。那不是最佳实践。 - Ahmet Yilmaz
你试过了吗? - cutiko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接