Подключаем JUnit к Maven-проекту для тестирования Java-приложения
Для тестирования Java-приложения можно использовать один из наиболее популярных и известных фреймворков, позволяющий писать и исполнять модульные тесты (или, по-другому, юнит-тесты, Unit-тесты) — JUnit.
На момент написания этой статьи самой актуальной версией фреймворка JUnit является JUnit 5, а официальный сайт фреймворка — https://junit.org/junit5/
В целом, на официальном сайте фреймворка Вы можете найти всю необходимую документацию и инструкции о том, как подключить и использовать JUnit в Вашем приложении. В частности, руководства по подключению JUnit к Maven-сборке можно найти по этой ссылке: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
Но в этой статье я хотел бы рассмотреть и поделиться с вами примером того, как я подключил JUnit к своему приложению. Для сборки тестового проекта я буду использовать Java 11 и встроенный в IntelliJ IDEA Maven версии 3.8.1.
Итак, для начала работы нам потребуется среда разработки IntelliJ IDEA (если у Вас не установлена данная IDE, можно посмотреть статью Первая программа на Java, где я ранее предоставил ссылки на разные IDE при начале разработки на Java и кратко рассматриваю их основные особенности).
Создайте простое тестовое приложение в IntelliJ IDEA при помощи выбора архетипа maven-archetype-quickstart. Детально этот процесс был рассмотрен в статье Первое знакомство с Maven, поэтому здесь я его не буду описывать повторно.
Когда проект создан, и сгенерированы все основные файлы приложения, включая файл pom.xml для сборки проекта при помощи Maven, в этот файл pom.xml я добавляю следующую конфигурацию для подключения JUnit:
1) В секцию dependencies я добавляю зависимость на JUnit с указанием версии 5.0.0:
org.junit.jupiter junit-jupiter-engine 5.0.0 test
2) В секции pluginManagement у меня указан плагин maven-surefire-plugin версии 2.19 с зависимостью на junit-platform-surefire-provider версии 1.0.0. Этот плагин используется во время фазы test жизненного цикла сборки для выполнения Unit-тестов Вашего приложения. Он также генерирует отчёты в двух разных файловых форматах:
По умолчанию эти файлы генерируются в директории $/target/surefire-reports/TEST-*.xml .
Помимо плагина manen-surefire-plugin у меня также указан maven-compiler-plugin версии 3.10.1 для компиляции файлов приложения с исходным кодом на Java.
Вот так у меня выглядит часть pom.xml с подключением необходимых плагинов:
maven-surefire-plugin 2.19 org.junit.platform junit-platform-surefire-provider 1.0.0 org.apache.maven.plugins maven-compiler-plugin 3.10.1
В целом, это всё, что необходимо для запуска тестов в Вашей Maven-сборке. pom.xml у меня для примера получился минимальный, в нём также есть секция properties с указанием source и target версий Java, а также кодировки исходных файлов Java.
На всякий случай я приведу итоговый pom.xml моего тестового проекта:
4.0.0 ru.allineed AllineedSamples 1.0-SNAPSHOT 11 11 UTF-8 org.junit.jupiter junit-jupiter-engine 5.0.0 test maven-surefire-plugin 2.19 org.junit.platform junit-platform-surefire-provider 1.0.0 org.apache.maven.plugins maven-compiler-plugin 3.10.1
Для демонстрационных целей в моём приложении у меня всего 1 тестовый класс Main, где и расположена точка входа в программу. Он расположен в директории /src/main/java/ru/allineed/ и выглядит следующим образом:
package ru.allineed; public class Main < public static void main(String[] args) < System.out.println("Hello world!"); >>
Также у меня есть 1 демонстрационный Unit-тест, чтобы потом показать как он будет выполняться при Maven-сборке нашего приложения (расположен в директории /src/test/java/):
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class SampleTest < @Test void myFirstTest() < assertEquals(2, 1 + 1); >>
Теперь можно создать сборочную конфигурацию в IDEA с типом Maven и единственной командой clean install для тестирования сборки нашего приложения. Альтернативно, в правой части IDEA можно открыть панель Maven и нажать в панели инструментов кнопку «m» (Execute Maven Goal). Независимо от способа, который Вы выбрали, запускаем Maven-сборку тестового приложения и увидим примерно следующее (в Вашем случае вывод в консоль может несколько отличаться). Я предоставляю пример вывода консоли не полностью, а с той его части, где начинается интересная информация про работу плагина maven-surefire-plugin и запуск нашего Unit-теста:
[INFO]
[INFO] --- maven-surefire-plugin:2.19:test (default-test) @ AllineedSamples ---
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running SampleTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec - in SampleTest
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ AllineedSamples ---
[INFO] Building jar: C:\Users\1\IdeaProjects\AllineedSamples\target\AllineedSamples-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ AllineedSamples ---
[INFO] Installing C:\Users\1\IdeaProjects\AllineedSamples\target\AllineedSamples-1.0-SNAPSHOT.jar to C:\Users\1\.m2\repository\ru\allineed\AllineedSamples\1.0-SNAPSHOT\AllineedSamples-1.0-SNAPSHOT.jar
[INFO] Installing C:\Users\1\IdeaProjects\AllineedSamples\pom.xml to C:\Users\1\.m2\repository\ru\allineed\AllineedSamples\1.0-SNAPSHOT\AllineedSamples-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.069 s
[INFO] Finished at: 2022-08-20T15:19:06+03:00
[INFO] ------------------------------------------------------------------------
Process finished with exit code 0
Как видите, в процессе сборки нашего приложения у нас запустился наш тест с именем SampleTest, также можно видеть статистику по нему:
Running SampleTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec - in SampleTest
То есть тест был успешно запущен (поле run: 1), без ошибок (поля Failures, Errors равны 0) и его пропуска при сборке (поле Skipped равно 0).
В конце можно видеть суммарные цифры отчёта по всем исполненным во время сборки Unit-тестам. У нас он всего один в примере, но если бы тестов было больше, то здесь мы бы увидели общее число запущенных Unit-тестов, а также поняли бы, сколько из них выполнено с ошибками:
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
На этом, пожалуй, всё. Пробуйте подключать JUnit к своим приложениям и обязательно покрывайте функциональность своих программ при помощи Unit-тестов! Покрытие кода модульными тестами — это хорошая практика разработки программного обеспечения.
Спасибо за внимание, пишите свои вопросы и комментарии внизу данной статьи. До встречи!
How to import the ‘@Test’ method in Java
Attempted Solution 1: Search dependency at Maven Repositories for org.junit.Test.
Result 1: «No matching items.»
Attempted Solution 2: write the dependencies into the pom.xml file.
Result: n/a. Nothing happened.
My code on the PersonTest.java file:
package com.marcusbiel.javacourse.lesson2; import org.junit.Test; import org.Assert.assertEquals; public class PersonTest < @Test public void shouldReturnHelloWorld() < Person tristan = new Person(); assertEquals("Hello World",tristan.helloWorld() ); >>
My code on the Person.java file:
package com.marcusbiel.javacourse.lesson2; public class Person < public String helloWorld()< return "Hello World"; >>
My code on the pom.xml file:
4.0.0 com.mycompany mavenproject1 1.0-SNAPSHOT jar UTF-8 12 12 junit junit 3.8.1 test
Note: I tried to fix the problem by adding in the. «
. part. I don’t think it’s working. I have no feedback from the program on that note.
When I run it. I want to see a messaging saying «all tests passed». As in the video here. (I have a timestamp on this link where the outcome occurs).
The import org.junit cannot be resolved
I haven’t used Java for a while, so this confuses me a little. I downloaded eclipse and when I tried to compile this test file, there are errors at the import and at the ‘@’ signs. The import error throws:
The import org.junit cannot be resolved.
What have you searched on the net? You want us to give you a detailed explanation of how can you run a JUnit 4 test case? (Hint: there’s this JUnit4.class in your code)
you need to add junit jar file to the project . You can use junit-dep-4.8.2.jar. Then you can right click and choose run as junit test case
16 Answers 16
You need to add JUnit library to the classpath of your project. There are several choices to achieve it depending on your development setup.
- Command line: In the case of command-line invocations, you will have to add junit.jar to the classpath of your application with java -cp /path/to/junit.jar . Take a look at the answers here.
- Using eclipse: Eclipse distributions are bundled with this library and this is how you can use it for your project. Right-click on the eclipse project and navigate:
Properties -> Java Build Path -> Libraries -> Add Library -> JUnit -> JUnit 3/4
In the scenarios where you want to use a different version of the jar, instead of clicking on Add Library above, you should click on Add External Jar and locate the library on the file system.