Это рассказ о параметризованном тесте, используемом в анализе граничных значений. Вместо того, чтобы вводить граничные значения в метод тестирования одно за другим, мы можем вместе определить тестовые случаи, в которых различаются только некоторые значения.

Параметризованные тесты

“Параметризированные тесты позволяют запускать тест несколько раз с разными аргументами. Они объявляются так же, как обычные методы @Test, но вместо этого используют аннотацию @ParameterizedTest. Кроме того, вы должны объявить по крайней мере один источник, который будет предоставлять аргументы для каждого вызова, а затем использовать аргументы в тестовом методе. – Руководство пользователя jUnit 5

Тесты граничных значений

Анализ граничных значений — это метод тестирования программного обеспечения, в котором тесты предназначены для включения представителей граничных значений в диапазон. — Википедия

Пример метода тестирования

Вот пример метода, который мы собираемся использовать для тестирования. Я делаю приложение, используя YouTubeAPI. Этот метод ставит «K» или «M» в конце в зависимости от количества просмотров.

При анализе граничных значений мы проверим значения -1 и 0, 999 и 1000, 999999 и 1000000. Каждый из счетчиков просмотров должен превратиться в «0», «0», «999», «1K», «999K». и «1M».
Итак, без использования параметризованного теста тестовые случаи должны выглядеть так, как показано ниже.

Все 6 тестовых случаев завершатся без ошибок. На самом деле это не так, но вам может показаться, что эти тестовые примеры слишком длинные и будут раздуваться каждый раз, когда вы добавляете граничные значения.
Вот почему в подобных ситуациях рекомендуются параметризованные тесты.

Преобразование в параметризованное тестирование

Для преобразования нам нужно использовать @ParameterizedTest вместо @Test и перечислить тестовые шаблоны в @CsvSource. То, что мы определяем в @CsvSource, станет аргументами для метода testViewCountToKM.

Все 6 тестовых случаев были протестированы должным образом. Тесты стали компактнее, а читабельность улучшилась.