🏠 Домашнее задание — Урок 02
Урок 02 — Summary session. Отдельного LMS-задания для этого урока нет — это занятие-повторение. Вместо этого предлагается серия упражнений для самостоятельной закрепления материала урока 01.
Упражнение 1: расширить тесты Calculator
На основе класса Calculator из урока 01 добавьте параметризованные тесты для всех методов (не только sum и avg):
- Параметризованный тест для
sub— не менее 3 наборов данных. - Параметризованный тест для
mul— включая умножение на 0 и отрицательные числа. - Параметризованный тест для
pow— включая значение по умолчанию (b=2). - Тест с
pytest.raisesдляdiv(x, 0).
Упражнение 2: маркировки
Разметьте тесты Calculator маркерами:
positive_test— для позитивных сценариев (нормальный ввод).negative_test— для негативных (деление на ноль, пустой список).- Зарегистрируйте оба маркера в
pytest.ini. - Проверьте командами:
pytest -m positive_test -vиpytest -m negative_test -v.
Упражнение 3: класс StringUtils
Создайте класс StringUtils с методами и напишите к нему тесты:
# string_utils.py
class StringUtils:
def reverse(self, s: str) -> str:
"""Перевернуть строку."""
return s[::-1]
def is_palindrome(self, s: str) -> bool:
"""Проверить, является ли строка палиндромом (без учёта регистра)."""
cleaned = s.lower().replace(" ", "")
return cleaned == cleaned[::-1]
def count_vowels(self, s: str) -> int:
"""Подсчитать количество гласных (a, e, i, o, u)."""
return sum(1 for c in s.lower() if c in 'aeiou')
Требования к тестам:
- Использовать
@pytest.fixtureдля созданияStringUtils(). - Тесты для
reverse: пустая строка, одна буква, нормальная строка. - Тесты для
is_palindrome: «racecar», «hello», «A man a plan a canal Panama» (с пробелами). - Тесты для
count_vowels: пустая строка, строка без гласных, нормальная строка. - Хотя бы один
@pytest.mark.parametrize.
Подготовка окружения
# PowerShell (в папке проекта)
python -m venv venv
venv\Scripts\activate
pip install pytest
# Структура файлов
Lesson2\
string_utils.py
test_string_utils.py
calculator.py
test_calculator.py
pytest.ini
Запуск и проверка в VS Code
- Открыть папку
Lesson2в VS Code. - Терминал:
venv\Scripts\activate→pytest -v. - Проверить, что все тесты зелёные (
PASSED). - Запустить только positive_test:
pytest -m positive_test -v. - Запустить только negative_test:
pytest -m negative_test -v. - Настройка отладки (F5): в
.vscode/launch.jsonдобавьте конфигурацию для pytest:
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "pytest: run current file",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"args": ["${file}", "-v"],
"console": "integratedTerminal",
"justMyCode": true
}
]
}
Проверка выполнения:
- Все тесты проходят без ошибок.
- Используется
@pytest.fixture(неCalculator()внутри каждого теста). - Есть хотя бы один
@pytest.mark.parametrize. - Маркеры зарегистрированы в
pytest.ini. - Файл именован правильно:
test_*.py.