Chapter 9. Testing

9.1 Setting the Test Class Life Cycle

Problem

You want to instantiate a JUnit 5 test only once per class instance, rather than the default once per test function.

Solution

Use the @TestInstance annotation, or set the life cycle default property in the junit-platform.properties file.

Discussion

Note

This recipe, as with many of the recipes in this chapter, is based on a blog post and presentation entitled, “Best Practices for Unit Testing in Kotlin,” by Philipp Hauer.

JUnit 4 by default creates a new instance of the test class for each test method. This ensures that the attributes of the test class are reinitialized each time, which makes the tests themselves independent. The downside is that the initialization code is executed again and again for each test.

To avoid that in Java, any properties of the class can be marked static, and any initialization code can be put in a static method that is annotated with @BeforeClass, which will be executed only once.

As an example, consider the following JUnit 4 test for java.util.List, shown in Example 9-1.

Example 9-1. JUnit 4 test for a list
public class JUnit4ListTests {
    private static List<String> strings =                  1
            Arrays.asList("this", "is", "a", "list", "of", "strings");

    private List<Integer> modifiable = new ArrayList<>();  

    @BeforeClass                                           
    public static void runBefore() {
        System.out.println("BeforeClass: ...

Get Kotlin Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.