Можно ли создавать параметризованные тестовые методы в JUnit?

«Можно ли создавать параметризованные тестовые методы в JUnit?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, но только с использованием специальной поддержки фреймворка для параметризованных тестов (Parameterized Tests). Обычный метод, аннотированный @Test, не может иметь параметров.

Пример в JUnit 5:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void testNumberIsPositive(int number) {
    assertTrue(number > 0);
}

Ключевые элементы JUnit 5:

  • @ParameterizedTest — указывает, что метод является параметризованным тестом.
  • Источник данных (например, @ValueSource, @CsvSource, @MethodSource) — предоставляет аргументы для каждого вызова теста.

В JUnit 4 для этого требуется использовать @RunWith(Parameterized.class) и специальный конструктор.