Chathumi Kumarapeli
Posted on October 30, 2021
In this tutorial we are going to learn to write more complex tests using JUnit. 馃檪
Repeatable Tests
When you are writing tests there may be instances where you need to run a specific test multiple times. For that JUnit has provided us with the annotation @RepeatedTest
. Let's see how we can use it.
import org.junit.jupiter.api.*;
public class TestManageEmployees {
@DisplayName("Checks the Repeated Tests")
@RepeatedTest(value = 5, name = "Repeating {currentRepetition} of {totalRepetitions}")
public void TestRepeatedTest() {
System.out.println("This is a repetition test");
}
}
As you can see we have given two arguments to @RepeatedTest
,
- value: this indicates the number of times that you want to run the test.
- name: this is the name that you can give to identify each test per each iteration.
>
currentRepetition
andtotalRepetitions
are keywords use byJUnit.
When you run the test you get the following output;
On left of the terminal you can see the unique name of each iteration and on right you can see the print statement that we have given has printed 5 times as we expected. Yes, I know it is a bit silly example for a test but as far as you get the concept I'm happy with that 馃槈
Conditional Executions
You may have instances where you want to run tests conditionally. For example, you might want a specific test case to run on a specific operating system. For that JUnit has provided us with two annotations,
-
@EnabledOnOs
@DisabledOnOs
Let's see their usage.
@EnabledOnOs
The annotation @EnabledOnOs
is used when you want to run a test method on a specific operating system. Check the following code.
import org.junit.jupiter.api.condition.EnabledOnOs;
public class TestManageEmployees {
@Test
@DisplayName("Should Be Enabled Only On MAC OS")
@EnabledOnOs(value = OS.MAC, disabledReason = "Test is only enabled on MAC OS")
public void TestEnabledOnOS() {
System.out.println("Tests EnabledOnOs annotation");
}
}
As you can see @EnabledOnOs
takes in two arguments.
- value: the OS where you want to RUN the test method.
- disabledReason: this is the line that displays in the terminal of other operating systems where the test method does not run.
As I'm using Windows this test does not run on my machine. Hence my output looks like this,
@DisabledOnOs
The annotation @DisabledOnOs
is the opposite. It is used when you have a test method that you do not want to run on a specific operating system.
import org.junit.jupiter.api.condition.DisabledOnOs;
public class TestManageEmployees {
@Test
@DisplayName("Should Be Disabled On Windows")
@DisabledOnOs(value = OS.WINDOWS, disabledReason = "Test is disabled on Windows")
public void TestDisabledOnOS() {
System.out.println("Tests DisabledOnOs annotation");
}
}
@DisabledOnOs
annotation also takes the same two arguments,
- value: the operating system on which you DO NOT want to run the test.
- disabledReason: this is the line that displays in the terminal of other operating systems that you have specified in the
value
section. The above test gave me the output,
With that we can wrap up the tutorial on repeatable and conditional tests. Want to know how to pass parameters into test methods? Check the next tutorial - JUnit 5 - Parameterized Tests 馃構
Posted on October 30, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.