Python: Параметризованные тесты для валидатора имени пользователя
Параметризованные тесты для валидатора имени пользователя
Ты пишешь тесты для функции 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]
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- pytest fixture: переиспользование модели в тестовом модуле
- Первые тесты на pytest: нормальные сценарии, граничные случаи и исключения — задача по Python
- Регрессионный тест Python: воспроизведите ошибку в calculatetax
- Фикстуры pytest и scope: напишите тесты для очереди
- Python: Напиши тесты для функции сохранения отчёта с tmppath
- Python: Напиши тесты для PricingService с stub-репозиторием
