Задача курса
Python: Параметризованные тесты для валидатора имени пользователя
Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Параметризация тестов через @pytest.mark.parametrize»
Условие
Параметризованные тесты для валидатора имени пользователя
Ты пишешь тесты для функции validate_username, которая проверяет корректность имён пользователей.
Что уже дано
Проверяющая система скрыто определяет функцию validate_username(name: str) -> bool до выполнения твоего кода. Функция возвращает True, если имя удовлетворяет всем правилам, и False иначе. Правила:
- длина от 3 до 20 символов включительно;
- допустимы только латинские буквы, цифры и символ подчёркивания
_; - имя не может начинаться с цифры.
Также скрыто импортирован pytest. Твой код выполняется в том же процессе и пространстве имён.
Что нужно сделать
Напиши одну параметризованную тест-функцию test_validate_username с декоратором @pytest.mark.parametrize.
Функция должна:
- Принимать параметры
name(строка) иexpected(булево значение). - Проверять через
assert validate_username(name) == expected. - Покрывать все шесть следующих сценариев одним декоратором
@pytest.mark.parametrize:
- корректное имя из букв и цифр — ожидается
True; - корректное имя с подчёркиванием — ожидается
True; - слишком короткое имя (меньше 3 символов) — ожидается
False; - слишком длинное имя (больше 20 символов) — ожидается
False; - имя с недопустимым символом (например, дефис или пробел) — ожидается
False; - имя, начинающееся с цифры — ожидается
False.
Не определяй validate_username самостоятельно: она уже создана проверяющей системой.
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно.
Проверяющая система читает верхнеуровневые имена после выполнения твоего кода: она ищет функцию test_validate_username и проверяет, что над ней стоит корректный декоратор @pytest.mark.parametrize с двумя именами параметров и шестью кортежами данных.
Пример использования
names = ["alice", "ab", "bad-name"]
print([validate_username(name) for name in names])
Результат:
[True, False, False]
