@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 упрощает тестирование методов с множеством входных данных, избегая дублирования кода и улучшая читаемость тестов. Это делает тесты более поддерживаемыми и расширяемыми, что особенно важно в крупных проектах.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться