Как правильно писать unit тесты java
Для написания тестов на Java
с использованием фреймворка JUnit
и автоматической сборки с помощью Gradle
, необходимо выполнить несколько шагов:
- Создать проект
Gradle
в IDE (например, вIntelliJ IDEA
). - Добавить зависимость
JUnit
в файлbuild.gradle
:
dependencies {
testImplementation 'junit:junit:4.13.2'
}
- Создать тестовый класс, который будет содержать методы с аннотацией
@Test
:
import org.junit.Test;
import static org.junit.Assert.*;
public class MyTest {
@Test
public void testSum() {
assertEquals(4, 2 + 2);
}
@Test
public void testMax() {
int[] numbers = {1, 2, 3, 4, 5};
int max = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
assertEquals(5, max);
}
}
- Запустить тесты с помощью команды
gradle test
в терминале или из IDE.
После выполнения этих шагов, Gradle
автоматически соберет и запустит все тесты, которые находятся в пакете src/test/java
. Результаты тестирования будут отображены в консоли или в специальной вкладке в IDE, и вы сможете увидеть, прошли ли все тесты успешно или есть ошибки.
Написание тестов - важный навык для обеспечения качества кода. Ключевые принципы не отличаются от языка к языку, но давайте уточним их для Java.
Для начала выберем фреймворк для тестирования, например JUnit:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class MyClassTest {
@Test
void testMethod() {
// тест
}
}
При написании тестов следуйте принципу "один тест - одна проверка".
@Test
void testAddition() {
Calculator calc = new Calculator();
assertEquals(4, calc.add(2, 2), "2 + 2 должно равняться 4");
}
Структурируйте тесты по схеме AAA (Arrange-Act-Assert), или Подготовка-Действие-Проверка:
@Test
void testDivision() {
// Arrange
Calculator calc = new Calculator();
// Act
double result = calc.divide(10, 2);
// Assert
assertEquals(5, result, "10 / 2 должно равняться 5");
}
Для проверки множества случаев используйте параметризованные тесты
@ParameterizedTest
@CsvSource({"1, 1, 2", "2, 3, 5", "-1, 1, 0"})
void testAddition(int a, int b, int expected) {
Calculator calc = new Calculator();
assertEquals(expected, calc.add(a, b));
}
В случае тестирования с побочными эффектами используйте моки и стабы
@Test
void testUserService(@Mock UserRepository repo) {
UserService service = new UserService(repo);
when(repo.findById(1L)).thenReturn(Optional.of(new User(1L, "John")));
User user = service.getUserById(1L);
assertEquals("John", user.getName());
}
Для написания теста на Java
необходимо использовать какой-либо фреймворк для тестирования, например, JUnit
. Рассмотрим пример написания теста на JUnit.
- Подключите зависимость
JUnit
в свой проект. Если вы используетеMaven
, добавьте следующий код вpom.xml
:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
- Создайте класс для тестирования. Например, если вы хотите протестировать класс
Calculator
, создайте классCalculatorTest
:
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculatorTest {
@Test
public void testAddition() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result);
}
@Test
public void testSubtraction() {
Calculator calculator = new Calculator();
int result = calculator.subtract(5, 3);
assertEquals(2, result);
}
}
- Создайте методы тестирования.
Каждый метод должен быть аннотирован аннотацией
@Test
. Внутри метода вызывайте методы, которые вы хотите протестировать, и сравнивайте ожидаемый результат с фактическим. В этом примере мы тестируем методыadd
иsubtract
классаCalculator
- Запустите тесты.
В большинстве сред разработки можно запустить тесты, нажав на кнопку "запустить тесты". Вы также можете запустить тесты из командной строки с помощью команды
mvn test
(если вы используетеMaven
) илиjava -cp <classpath> org.junit.runner.JUnitCore <test class name>
Это только основы, но они помогут вам начать написание юнит-тестов в Java