Testing Basics
Expected Failure
Model a test that expects one input to fail validation.
testing
Some tests pass only when invalid input is rejected, so the expected failure becomes part of the assertion.
Expected Failure
ExpectedFailure.kt
Replay: real traced execution (multi-file project)
fun validateName(name: String): Boolean {
return name.isNotBlank()
}
fun main() {
val name = ""
val expectedFailure = name.isBlank()
val valid = validateName(name)
val sawFailure = !valid
val testPassed = sawFailure == expectedFailure
println("nameLength=${name.length}")
println("expectedFailure=$expectedFailure")
println("sawFailure=$sawFailure")
println("testPassed=$testPassed")
}
fun validateName(name: String): Boolean {
return name.isNotBlank()
}
fun main() {
val name = "Ada"
val expectedFailure = name.isBlank()
val valid = validateName(name)
val sawFailure = !valid
val testPassed = sawFailure == expectedFailure
println("nameLength=${name.length}")
println("expectedFailure=$expectedFailure")
println("sawFailure=$sawFailure")
println("testPassed=$testPassed")
}
fun validateName(name: String): Boolean {
return name.isNotBlank()
}
fun main() {
val name = " "
val expectedFailure = name.isBlank()
val valid = validateName(name)
val sawFailure = !valid
val testPassed = sawFailure == expectedFailure
println("nameLength=${name.length}")
println("expectedFailure=$expectedFailure")
println("sawFailure=$sawFailure")
println("testPassed=$testPassed")
}
name ← (empty), expectedFailure ← true
5fun main() {6 val name→ (empty) = "" //@name="Ada", " "7 val expectedFailure→ true = name(empty).isBlank()8 val valid = validateName(name(empty))9 val sawFailure = !validfun validateName(name: String): Boolean
1fun validateName(name(empty): String): Boolean {2 return name(empty).isNotBlank()3}valid ← false, sawFailure ← true, testPassed ← true
7 val expectedFailure = name.isBlank()8 val valid→ false = validateName(name(empty))9 val sawFailure→ true = !validfalse10 val testPassed→ true = sawFailuretrue == expectedFailuretrue1112 println("nameLength=${name.length0}")13 println("expectedFailure=$expectedFailuretrue")14 println("sawFailure=$sawFailuretrue")15 println("testPassed=$testPassedtrue")16}outputnameLength=0 expectedFailure=true sawFailure=true testPassed=true
name ← Ada, expectedFailure ← false
5fun main() {6 val name→ Ada = "Ada"7 val expectedFailure→ false = nameAda.isBlank()8 val valid = validateName(nameAda)9 val sawFailure = !validfun validateName(name: String): Boolean
1fun validateName(nameAda: String): Boolean {2 return nameAda.isNotBlank()3}valid ← true, sawFailure ← false, testPassed ← true
7 val expectedFailure = name.isBlank()8 val valid→ true = validateName(nameAda)9 val sawFailure→ false = !validtrue10 val testPassed→ true = sawFailurefalse == expectedFailurefalse1112 println("nameLength=${name.length3}")13 println("expectedFailure=$expectedFailurefalse")14 println("sawFailure=$sawFailurefalse")15 println("testPassed=$testPassedtrue")16}outputnameLength=3 expectedFailure=false sawFailure=false testPassed=true
name ← , expectedFailure ← true
5fun main() {6 val name→ = " "7 val expectedFailure→ true = name .isBlank()8 val valid = validateName(name )9 val sawFailure = !validfun validateName(name: String): Boolean
1fun validateName(name : String): Boolean {2 return name .isNotBlank()3}valid ← false, sawFailure ← true, testPassed ← true
7 val expectedFailure = name.isBlank()8 val valid→ false = validateName(name )9 val sawFailure→ true = !validfalse10 val testPassed→ true = sawFailuretrue == expectedFailuretrue1112 println("nameLength=${name.length2}")13 println("expectedFailure=$expectedFailuretrue")14 println("sawFailure=$sawFailuretrue")15 println("testPassed=$testPassedtrue")16}outputnameLength=2 expectedFailure=true sawFailure=true testPassed=true