Dependency Injection and Testing in JUnit 5. Part 2
2. Repeated tests
JUnit 5 provides the ability to repeat a test a specified number of times by annotating a method with @RepeatedTest and specifying the total number of repetitions desired. This may be particularly useful when some conditions may change from one execution of a test to another one. Each invocation of a repeated test behaves like the execution of a regular @Test method with full support for the lifecycle callbacks and extensions.
In addition to specifying the number of repetitions, a custom display name can be configured for each repetition via the name attribute of the @RepeatedTest annotation. The following placeholders are currently supported:
- – {displayName}: display name of the @RepeatedTest method
- – {currentRepetition}: current repetition number
- – {totalRepetitions}: total number of repetitions
Listing 3 shows the usage of repeated tests, of the display name placeholders and of the RepetitionInfo parameters. The scenario of the first repeated test verifies that the execution of the add method from the Calculator class is stable and it always provides the same result. The scenario of the second repeated test verifies that collections follow the appropriate behavior: a list is receiving a new element at each iteration, but a set will not get duplicate elements, even if we try to insert it a few times.
For the example above, we remark the following:
- The first test is repeated five times, and at each repetition it shows the display name, the current repetition number and the total number of repetitions (1).
- The second test is repeated five times, and at each repetition it shows the number of elements into the list (which is the current repetition number) and the fact that the set always has only one element (2).
- At the execution of each of the repeated second test, the repetition number is displayed, as it’s injected into the RepetitionInfo parameter (3).
The result of the execution of the previous tests is shown in figures 2 and 3.
Figure 2 The names of the repeated tests at the time of the execution