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

name
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")
}
  1. 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 = !valid
  2. fun validateName(name: String): Boolean

    1fun validateName(name(empty): String): Boolean {2    return name(empty).isNotBlank()3}
  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
  1. 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 = !valid
  2. fun validateName(name: String): Boolean

    1fun validateName(nameAda: String): Boolean {2    return nameAda.isNotBlank()3}
  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
  1. name ← , expectedFailure ← true

    5fun main() {6    val name = "  "7    val expectedFailure→ true = name  .isBlank()8    val valid = validateName(name  )9    val sawFailure = !valid
  2. fun validateName(name: String): Boolean

    1fun validateName(name  : String): Boolean {2    return name  .isNotBlank()3}
  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