Class that allows multiple assertions to be performed within a test, with any failures accumulated and reported together at the end of the test.
Class that allows multiple assertions to be performed within a test, with any failures accumulated and reported together at the end of the test.
See the main documentation for trait Checkpoints
for more information and an example.
Trait providing class
Checkpoint
, which enables multiple assertions to be performed within a test, with any failures accumulated and reported together at the end of the test.Because ScalaTest uses exceptions to signal failed assertions, normally execution of a test will stop as soon as the first failed assertion is encountered. Trait
Checkpoints
provides an option when you want to continue executing the remainder of the test body, or part of it, even if an assertion has already failed in that test.To use a
Checkpoint
(once you've mixed in or imported the members of traitCheckpoints
), you first need to create one, like this:Then give the
Checkpoint
assertions to execute by passing them (via a by-name parameter) to itsapply
method, like this:Both of the above assertions will fail, but it won't be reported yet. The
Checkpoint
will execute them right away, each time itsapply
method is invoked. But it will catch theTestFailedExceptions
and save them, only reporting them later whenreportAll
is invoked. Thus, at the end of the test, you must callreportAll
, like this:This
reportAll
invocation will complete abruptly with aTestFailedException
whose message includes the message, source file, and line number of each of the checkpointed assertions that previously failed. For example:Make sure you invoke
reportAll
before the test completes, otherwise any failures that were detected by theCheckpoint
will not be reported.Note that a
Checkpoint
will catch and record for later reporting (viareportAll
) exceptions that mix inStackDepth
except forTestCanceledException
,TestRegistrationClosedException
,NotAllowedException
, andDuplicateTestNameException
. If a block of code passed to aCheckpoint
'sapply
method completes abruptly with any of theStackDepth
exceptions in the previous list, or any non-StackDepth
exception, that invocation of theapply
method will complete abruptly with the same exception immediately. Unless you putreportAll
in a finally clause and handle this case, such an unexpected exception will cause you to lose any information about assertions that failed earlier in the test and were recorded by theCheckpoint
.