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()
}
}