← Назад ко всем вопросам

@Test и @ParameterizedTest - разница

1️⃣ Как кратко ответить

@Test используется для обозначения стандартного тестового метода в JUnit, который выполняется один раз с фиксированными входными данными. @ParameterizedTest позволяет запускать один и тот же тестовый метод несколько раз с разными наборами входных данных, что упрощает тестирование различных сценариев.

2️⃣ Подробное объяснение темы

JUnit — это популярный фреймворк для тестирования в Java, который предоставляет аннотации для упрощения написания и выполнения тестов. Две из таких аннотаций — @Test и @ParameterizedTest — имеют разные цели и применяются в различных сценариях.

@Test

Аннотация @Test используется для обозначения метода как тестового. Это базовая аннотация в JUnit, которая указывает, что метод должен быть выполнен как тест. Каждый метод, помеченный @Test, выполняется один раз с фиксированными входными данными. Это подходит для тестов, где входные данные и ожидаемый результат известны и не меняются.

Пример использования @Test:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
​
public class CalculatorTest {
​
    // Метод, который будет протестирован
    public int add(int a, int b) {
        return a + b;
    }
​
    // Тестовый метод, который проверяет работу метода add
    @Test
    public void testAdd() {
        CalculatorTest calculator = new CalculatorTest();
        // Проверяем, что сумма 2 и 3 равна 5
        assertEquals(5, calculator.add(2, 3));
    }
}
  • @Test: Аннотация, указывающая, что метод testAdd является тестовым.
  • assertEquals(5, calculator.add(2, 3)): Проверка, что метод add возвращает ожидаемое значение 5 при передаче аргументов 2 и 3.

@ParameterizedTest

Аннотация @ParameterizedTest используется для выполнения одного и того же тестового метода несколько раз с разными наборами входных данных. Это полезно, когда необходимо протестировать метод с различными комбинациями входных данных, не дублируя код теста.

Для использования @ParameterizedTest необходимо также указать источник данных, например, с помощью аннотаций @ValueSource, @CsvSource и других.

Пример использования @ParameterizedTest:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;
​
public class NumberTest {
​
    // Метод, который будет протестирован
    public boolean isEven(int number) {
        return number % 2 == 0;
    }
​
    // Параметризованный тестовый метод, который проверяет, что числа четные
    @ParameterizedTest
    @ValueSource(ints = {2, 4, 6, 8})
    public void testIsEven(int number) {
        NumberTest numberTest = new NumberTest();
        // Проверяем, что число четное
        assertTrue(numberTest.isEven(number));
    }
}
  • @ParameterizedTest: Аннотация, указывающая, что метод testIsEven является параметризованным тестом.
  • @ValueSource(ints = {2, 4, 6, 8}): Источник данных, который передает в тестовый метод набор целых чисел.
  • assertTrue(numberTest.isEven(number)): Проверка, что метод isEven возвращает true для каждого числа из источника данных.

Зачем это нужно

Использование @Test и @ParameterizedTest позволяет эффективно организовать тестирование в проекте. @Test подходит для простых случаев, когда входные данные и ожидаемый результат фиксированы. @ParameterizedTest упрощает тестирование методов с множеством входных данных, избегая дублирования кода и улучшая читаемость тестов. Это делает тесты более поддерживаемыми и расширяемыми, что особенно важно в крупных проектах.

Тема: Тестирование
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки