Can not test this dataClass in kotlin with mock or without

Viewed 745

It pass successfully except cardNumber and termsAndCondition. These two return null. How can return truth values during test? (I did not remove some comments to show codes that I already tried.)

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 Answers

Because isValid is a val so is created when the class is instantiated. Change it for a function and it will be computed every time, including the changes to the vars.

Related