Ответ
Да, постоянно использую параметризацию. Это один из основных приёмов для создания эффективных и поддерживаемых наборов автотестов.
Примеры из практики:
-
В pytest (Python): Использую декоратор
@pytest.mark.parametrizeдля data-driven тестирования.import pytest @pytest.mark.parametrize("login, password, expected_result", [ ("valid_user", "correct_pass", "SUCCESS"), ("invalid_user", "wrong_pass", "ERROR"), ("", "", "VALIDATION_ERROR"), ]) def test_login_functionality(login, password, expected_result): # Вызов метода авторизации и проверка результата actual_result = authorize(login, password) assert actual_result == expected_result - В JUnit 5 (Java): Использую аннотации
@ParameterizedTestи@CsvSourceили@MethodSource.@ParameterizedTest @CsvSource({ "2, 3, 5", "10, -5, 5", "0, 0, 0" }) void testAddition(int a, int b, int expectedSum) { Calculator calc = new Calculator(); assertEquals(expectedSum, calc.add(a, b)); }
Параметризация позволяет избежать дублирования кода, легко добавлять новые тестовые данные и чётко отделять логику теста от входных данных.
Ответ 18+ 🔞
Ну вот, опять про эти ваши тесты. Слушай, а ты знаешь, что параметризация — это как волшебная палочка для ленивого, но умного тестировщика? Ну то есть для нормального человека. Вместо того чтобы писать десять одинаковых тестов, которые отличаются только цифрами, ты пишешь один, но говоришь ему: «Слушай, дружище, вот тебе список, пробегись». И он бежит, ядрёна вошь!
Вот смотри, как я это обычно делаю, чтоб тебе было понятно:
-
В pytest (Python): Тут вообще красота, один декоратор и ты король. Берёшь
@pytest.mark.parametrizeи навешиваешь на тест, как орден.import pytest @pytest.mark.parametrize("login, password, expected_result", [ ("valid_user", "correct_pass", "SUCCESS"), ("invalid_user", "wrong_pass", "ERROR"), ("", "", "VALIDATION_ERROR"), ]) def test_login_functionality(login, password, expected_result): # Вызов метода авторизации и проверка результата actual_result = authorize(login, password) assert actual_result == expected_resultВидишь? Одна функция, а запустится три теста. Один проверит, что с нормальными данными всё ок, второй — что с левыми данными ошибка, а третий — что пустые поля не прокатят. Удобно же, ёпта? Не надо плодить сущности.
-
В JUnit 5 (Java): Тут тоже не отстают, хотя выглядит чуть более официально. Аннотации
@ParameterizedTestи@CsvSource— лучшие друзья.@ParameterizedTest @CsvSource({ "2, 3, 5", "10, -5, 5", "0, 0, 0" }) void testAddition(int a, int b, int expectedSum) { Calculator calc = new Calculator(); assertEquals(expectedSum, calc.add(a, b)); }По сути, то же самое: один тестовый метод, а кормим его разными наборами данных, как на конвейере. И каждый прогон — это отдельный тестовый случай в отчёте. Красота!
И главная фишка всей этой движухи — ты не копипастишь код. Добавил новую строчку в список данных — и новый тест готов. Подозрение ебать чувствую, что без этого жить уже невозможно. Плюс, когда данные отдельно, а логика теста отдельно, то через полгода даже ты сам поймёшь, что тут происходит, а не будешь материться, разбирая свои же творения. В общем, вещь обязательная, как карта в игре.