In Junit based testing framework there are few possible test outcomes: passed, failed and crashed. In this short note we will dive into that mechanisms.
Test will pass, if no exception is thrown. Empty test should always pass:
class TestFlowShowcase : StringSpec({    "it should pass"{        // nothing here    }})Or test with assertion that passes:
class TestFlowShowcase : StringSpec({    "1 == 1"{        (1 == 1) shouldBe true    }})Test will fail, if AssertionException (or descendant) would be thrown:
class TestFlowShowcase : StringSpec({   "it should fail"{        throw AssertionError("fail")    }})Test will crash, if other exception would be thrown:
class TestFlowShowcase : StringSpec({    "it should crash"{        throw Exception("it crashed")    }})
How to treat different test outcomes?
| Passed | No error was thrown | 
| Failed | AssertionError was thrown in test | 
| Crashed | Other exception was thrown | 
„Green” test means only that no error was thrown during test execution – it may also mean that no assertion was performed.
Usually test failed means that something is wrong with system under test – it doesn’t meet expectations defined in assertions.
Test crash indicate that something is wrong with test itself – it does not handle exception thrown in system under test, or its mocks are misconfigured.
