JUnit 5 и тестирование Java
JUnit 5 и тестирование Java
JUnit 5 (Jupiter) — стандарт unit-тестов в Java. В связке с Mockito и Spring Boot Test покрывают большинство сценариев от чистой логики до HTTP API.
Сборка: Maven и Gradle · Spring · Первая программа на Spring.
JUnit 5 — основы
Зависимость Maven:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
private final Calculator calc = new Calculator();
@Test
@DisplayName("сложение двух чисел")
void adds() {
assertEquals(5, calc.add(2, 3));
}
@ParameterizedTest
@CsvSource({
"0, 0, 0",
"1, 2, 3",
"-1, 1, 0"
})
void addsParameterized(int a, int b, int expected) {
assertEquals(expected, calc.add(a, b));
}
@Test
void throwsOnOverflow() {
assertThrows(ArithmeticException.class, () -> calc.divide(1, 0));
}
}
Запуск:
mvn test
# или
./mvnw test
Mockito
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
UserRepository repository;
@InjectMocks
UserService service;
@Test
void createsUser() {
when(repository.existsByEmail("a@b.c")).thenReturn(false);
when(repository.save(any())).thenAnswer(inv -> inv.getArgument(0));
var user = service.register("Ann", "a@b.c");
assertEquals("Ann", user.getName());
verify(repository).save(any(User.class));
}
}
Spring Boot Test
В проекте Spring Boot достаточно spring-boot-starter-test (JUnit + Mockito + AssertJ + MockMvc).
@WebMvcTest — контроллер изолированно
@WebMvcTest(HelloController.class)
class HelloControllerTest {
@Autowired
MockMvc mvc;
@Test
void returnsGreeting() throws Exception {
mvc.perform(get("/api/hello").param("name", "Java"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.message").value("Hello, Java"));
}
}
@SpringBootTest — полный контекст
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ApplicationIT {
@Autowired
TestRestTemplate rest;
@Test
void health() {
var response = rest.getForEntity("/actuator/health", String.class);
assertEquals(200, response.getStatusCode().value());
}
}
Структура тестов Maven
src/
main/java/...
test/java/... # зеркало пакетов main
Имена: *Test.java (unit), *IT.java (integration, опционально отдельный профиль).
CI
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
- run: mvn -B verify
Связанные материалы
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Основы Java - устройство JDK/JVM, модель компиляции и базовые принципы платформонезависимого выполнения. Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Набор советов, правил, принципов и обычаев в разработке на этом языке. История Java — от проекта Green и Oak до OpenJDK, LTS-релизов и современной платформы (модули, records, виртуальные потоки). Библиотеки, фреймворки, инструменты сборки, тестирования, развёртывания и мониторинга. Что такое пакет и пакетная структура, как собираются проекты на Java. Справочник-шпаргалка по конфигурациям в Java — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс — раздел. Гайд по установке и настройке с написанием первой программы и её запуском. Практические примеры — консольные утилиты, композиция классов в мини-игре и первое Swing-приложение. Точки останова, пошаговое выполнение, панели Variables и Call Stack — практика отладки в IntelliJ IDEA. Кавычки, точки, запятые, скобки и прочие знаки препинания. Это полный справочник всех ключевых слов языка Java, включая основные, контекстные и зарезервированные слова.Основы языка Java
Что требуется знать перед началом изучения языка программирования Java
Рекомендации по разработке на Java
История языка Java
Экосистема Java-приложений
Структура и сборки Java-проектов
Справочник по конфигурациям в Java
Первая программа на Java
Простые приложения на Java
Отладка Java-кода в IDE
Синтаксис и пунктуация в Java
Ключевые слова в Java