Table of Contents
What is JUnit 5?
JUnit is one of the most popular
...
unit-testing
...
frameworks
...
in
...
the
...
Java
...
ecosystem.
...
Unlike previous versions of JUnit, JUnit 5 is composed of several different modules from three different sub-projects.
...
JUnit Platform - foundation layer which enables different testing frameworks to be launched on the JVM
Junit Jupiter - is the JUnit 5 test framework which is launched by the JUnit Platform
JUnit Vintage - legacy TestEngine which runs older tests
Requirements:
Note |
---|
JUnit 5 needs already installed to run:
|
...
If you want to know more about JUnit, refer to the official documentation.
Example project structure
This is the basic template:
Code Block |
---|
. ├── pom.xml └── src ├── main │ ├── java │ │ └── SourceCodeClass.java │ └── resources └── test └── java └── TestClass.java |
pom.xml
There is pom.xml file, which is config file for our Java project using Maven.
According to https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
...
Code Block |
---|
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>JUnit5_Overview<</artifactId> <version>1.0-SNAPSHOT</version> // This is depedency that we need to add to usew JUnit5 in our project <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.7.2</version> <scope>test</scope> </dependency> </dependencies> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> // This plugins enables running tests from shell <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M1</version> </plugin> </plugins> </build> </project> |
Maven Surefire Plugin is used during the test phase of the build lifecycle to execute the unit tests of an application. It can be used with JUnit, TestNG or other testing frameworks.
By default, the Surefire Plugin will automatically include all test classes with the following wildcard patterns, and execute them as unit tests:
Pattern |
---|
**/Test*.java |
**/*Test.java |
**/*Tests.java |
**/*TestCase.java |
main / test folders
Inside Overview/src
folder you can see two subfolders:
...
main
- here are our source codes, with working functionalities →SourceCodeClass.java
test
- here are test classes, that check whether source code is working properly. This is where our JUnit5 is used →TestClass.java
Running tests
From shell
Note |
---|
Remember to install Maven & Java 8! |
Go to your project directory
Code Block |
---|
> cd <project dir> |
and then run this:
Code Block |
---|
> mvn clean test
// clean deletes caches |
You shoud see sth like this this:
Code Block |
---|
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< org.example:Calculator >-----------------------
[INFO] Building Calculator 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ Calculator ---
[INFO] Deleting /home/agatafilipczak/workspace/ACH/ach-tutorials/TDD-java/Calculator/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Calculator ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/agatafilipczak/workspace/ACH/ach-tutorials/TDD-java/Calculator/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ Calculator ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/agatafilipczak/workspace/ACH/ach-tutorials/TDD-java/Calculator/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ Calculator ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/agatafilipczak/workspace/ACH/ach-tutorials/TDD-java/Calculator/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ Calculator ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/agatafilipczak/workspace/ACH/ach-tutorials/TDD-java/Calculator/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M1:test (default-test) @ Calculator ---
[INFO]
//This is important part, we can see that 2 tests were run, no errors and build success!
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running CalculatorTest
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.041 s - in CalculatorTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.819 s
[INFO] Finished at: 2021-10-13T19:07:48+02:00
[INFO] ------------------------------------------------------------------------ |
From Intellij IDE
...
After we have set up the code for the testing, we can run the tests and find out if the tested methods are working correctly.
- To run an individual test, click in the gutter and select Run.
- To run all tests in a test class, click against the test class declaration and select Run.
You can view test results in the Run tool window.
functionalities
Code Block public class SourceCodeClass { public static void main(String[] args) { System.out.printf("This is our main class!"); } }
test
- here are test classes, that check whether source code is working properly. This is where our JUnit5 is used →TestClass.java
A test method is a method that fulfills these three requirements:
- A test method isn't
private
orstatic
- Its return type must be
void
. - A test method must be annotated with the
@Test
annotation.
Code Block // We import jupiter to our class to use proper annotation import org.junit.jupiter.api.*; class TestClass { @Test void exampleTest() { System.out.println("example test method"); } }
- A test method isn't
...