Пишем первые автоматические тесты
Тесты SafeSort работают только во временном каталоге pytest — ни один из них не трогает настоящие пользовательские файлы.
Представим: кто-то случайно сломал классификатор — расширение
.PDF в верхнем регистре перестало определяться как документ. Как об этом узнать, не
проверяя вручную каждый раз?
Возвращаем нормализацию регистра на место — и тот же тест подтверждает исправление:
Код, который сам проверяет другой код и сообщает, если поведение изменилось незаметно
для человека, называют автоматическим тестом. В Python для этого чаще
всего используют pytest.
pip install -e ".[dev]"
pytest tests/ -v
apply прямо на ~/Downloads, при первом же неудачном запуске способен испортить реальные файлы. Все тесты SafeSort работают внутри временного каталога, который pytest создаёт и удаляет сам, через встроенную функцию tmp_path — она передаётся тестовой функции как обычный параметр:from safesort.classifier import classify
from safesort.config import DEFAULT_EXTENSIONS
def test_classify_known_extension():
# Arrange: расширение и правило классификации уже готовы, ничего создавать не нужно
# Act
rezultat = classify(".pdf", DEFAULT_EXTENSIONS)
# Assert
assert rezultat == "documents"
Три части — Arrange (подготовить), Act (вызвать),
Assert (проверить) — повторяются почти в каждом тесте SafeSort. Функция
classify() — хороший первый тест не случайно: она чистая, не
трогает файловую систему и не зависит ни от чего внешнего. Следующая страница берётся за
более сложные тесты — те, что действительно создают файлы во временном каталоге.
Коротко
- Тест — код, который проверяет код: запускает функцию и сравнивает результат с ожидаемым.
- tmp_path — временный каталог, который pytest создаёт и удаляет для каждого теста сам.
- Ни один тест SafeSort не обращается к настоящему пользовательскому каталогу вроде ~/Downloads.