In this tutorial we will dive into JUnit5 framework even more basing on very simple Calculator project.
The tutorial repository can be found here:
Project Structure:
. ├── pom.xml └── src ├── main │ └── java │ └── Calculator.java └── test └── java └── CalculatorTest.java
Our Calculator.java
look like this:
As you can see it has only divide() method, that checks if b is equal to 0. If it is, it throws an exception.
public class Calculator { static Double divide(Double a, Double b) { if (b != 0) { return a / b; } else{ throw new ArithmeticException("Division by 0 is impossible!"); } } public static void main(String[] args) { System.out.printf(Calculator.divide(8.0,2.0).toString()); } }
So let's write first simple test, but before that we need to know what the assertion are.
1. Assertions
Assertion is a statement in java. It can be used to test your assumptions about the program.
JUnit 5 assertions help in validating the expected output with actual output of a testcase. (The order is always the same!!)
List of every possible assertions is here: https://junit.org/junit5/docs/5.7.2/api/org.junit.jupiter.api/org/junit/jupiter/api/Assertions.html
So our test class looks like this:
@Test @DisplayName("Divide two finite numbers") void divideTest() { final double EXPECTED = 4; final double ACTUAL = Calculator.divide(8.0,2.0); assertEquals(EXPECTED,ACTUAL); }
2. Exceptions
To ensure our error handling works correctly, we can verify that a piece of code throws a specific exception under certain conditions.
This can be done with the assertThrows()
method in JUnit 5: If we catch this thrown exception test is passed.
@Test @DisplayName("Divide by 0") void divideBy0ExpectedExceptionTest() { assertThrows(ArithmeticException.class, () -> { Calculator.divide(8.0,0.0); });