Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

This page describes how we can write our first test class with JUnit 5. After we have finished this blog postpage, we:

  • Can create test classes with JUnit 5.
  • Know how we can use setup and teardown methods.
  • Understand how we can write simple test methods with JUnit 5.

...

Info

The tutorial repository can be found here:

https://gitlab.eufus.eupsnc.pl/bpogodzinskiach/ach-tutorials/-/tree/TDD-java/TDD-java/Overview

Test class is in src/test/java/Junit5ExampleTest.java 

A basic test class looks like this:

Code Block
import org.junit.jupiter.api.DisplayName;
 
@DisplayName("JUnit 5 Example")
class JUnit5ExampleTest {
     .....
}

Setup  Setup and Teardown methods

A test class can have four setup and teardown methods that must fulfill these two conditions:

...

  • The method that is annotated with the @BeforeAll annotation must be static, and it's run once before any test method is run.
  • The method that is annotated with the @BeforeEach is invoked before each test method.
  • The method that is annotated with the @AfterEach annotation is invoked after each test method.
  • The method that is annotated with the @AfterAll annotation must be static, and it's run once after all test methods have been run.

...

Code Block
import org.junit.jupiter.api.*;
 
@DisplayName("JUnit 5 Example")
class JUnit5ExampleTest {
 
    @BeforeAll
    static void beforeAll() {
        System.out.println("Before all test methods");
//        Some examples of common expensive operations are:
//       - the creation of a database connection
//       - the startup of a server.     }
 
    @BeforeEach
    void beforeEach() {
        System.out.println("Before each test method");
//        This is useful when we want to execute some common code before running a test.
//        - list initialization
     }
 
    @AfterEach
    void afterEach() {
        System.out.println("After each test method");
    }
 
    @AfterAll
    static void afterAll() {
        System.out.println("After all test methods");
    }
}

...

Writing Our First Test Methods

A test method is a method that fulfills these three requirements:

  • A test method isn't private or static
  • A test method must not return anything. In other words, its return type must be void.
  • A test method must be annotated with the @Test annotation.


Let's add two test methods to our test class:

The firstTest() method

...

and

...

 

...

secondTest() method

...

have a custom display name and

...

they write a unique string to System.out.

After we have written these two test methods, the source code of our test class looks as follows:


Code Block

import org.junit.jupiter.api.*;
 
@DisplayName("JUnit 5 ExampleOverview class")
class JUnit5ExampleTestJUnit5OverviewTest {

//    Setup
    @BeforeAll
    static void beforeAll() {
        System.out.println("Before\nBefore all test methods \n");
//        Some examples of common expensive operations are:
//       - the creation of a database connection
//       - the startup of a server.
    }
 
    @BeforeEach
    void beforeEach() {
        System.out.println("  Before each test method");
//        This is useful when we want to execute some common code before running a test.
//        - list initialization
    }

//    Teardown
    @AfterEach
    void afterEach() {
        System.out.println("  After each test method \n");
    }
 
    @AfterAll
    static void afterAll() {
        System.out.println("After all test methods\n");
    }
 
// Added test methods

    @Test
    @DisplayName("First test")
    @Test
    void firstTest() {
        System.out.println("    First test method");
    }
 
    @Test
    @DisplayName("Second test")
    void secondTest() {
        System.out.println("    Second test method");
    }


}


We have just written our first test methods. Let's see what happens when we run our unit tests.

...

This tutorial has taught us four three things:

...

  • Setup and teardown methods must not be private and they must not return anything.
  • A test method is a method that isn't private and doesn't return anything.
  • We could specify the display name of a test class and a test method because this allows us to replace technical names with sentences that make sense.