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 |
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 bestatic
, 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 bestatic
, 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
orstatic
- 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.