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.