Versions Compared

Key

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

In this tutorial we will dive into JUnit5 framework even more basing on very simple Calculator project that will grow with us during tutorial.

...

.

Table of Contents

...

Info

The tutorial repository can be found here:

https://gitlab.eufus.psnc.pl/ach/ach-tutorials


Project Structure:

Code Block
.
├── 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.

Code Block
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.

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:

Code Block
 @Test
    @DisplayName("Divide two finite numbers")
    void divideTest() {
	     
         final double EXPECTED = 4;
         final double ACTUAL = Calculator.divide(8.0,2.0);

        assertEquals(EXPECTED,ACTUAL);
    }


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.


Code Block
    @Test
    @DisplayName("Divide by 0")
    void divideBy0ExpectedExceptionTest() {
        assertThrows(ArithmeticException.class, () -> {
            Calculator.divide(8.0,0.0);
        });