Задача курса
Python: Напиши тесты для функции сохранения отчёта с tmppath
Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «tmp_path: тестирование файловых операций во временной директории»
Условие
Напиши тесты для функции сохранения отчёта с tmp_path
Тебе нужно написать pytest-тесты для функции save_report, которая создаёт файл отчёта по заданному пути. Все файловые операции в тестах должны использовать tmp_path — никаких жёстко заданных путей внутри проекта.
Что уже дано
Проверяющая система скрыто определяет функцию save_report в том же пространстве имён до запуска твоего кода:
from pathlib import Path
def save_report(path: Path, lines: list[str]) -> None:
"""Записывает строки в файл, каждую с новой строки."""
path.write_text("\n".join(lines), encoding="utf-8")
Функция принимает путь к файлу (Path) и список строк (list[str]), записывает их в файл через "\n".join(lines). Функция уже доступна по имени save_report — импортировать ничего не нужно.
Также доступны pytest и Path из pathlib.
Что нужно сделать
Напиши в редакторе pytest-файл с тремя тест-функциями:
test_save_report_creates_file(tmp_path)— проверяет, что файл не существует до вызоваsave_report, а после вызова существует.test_save_report_content(tmp_path)— проверяет, что содержимое созданного файла точно соответствует ожидаемому: строки соединены через"\n"без завершающего переноса.test_save_report_empty_lines(tmp_path)— проверяет поведение при передаче пустого списка: файл создаётся и содержит пустую строку ("").
Во всех трёх тестах:
- путь к файлу строится от
tmp_path(например,tmp_path / "report.txt"); - не используются жёстко заданные пути вроде
Path("report.txt")илиopen("output.txt", "w").
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно.
Проверяющая система после твоего кода:
- Запускает все три тест-функции на правильной реализации
save_reportи требует, чтобы они прошли. - Подменяет
save_reportна сломанные мутанты по очереди и требует, чтобы соответствующий тест поднялAssertionError:
- мутант для теста 1: функция не создаёт файл вообще (тело —
pass); - мутант для теста 2: функция записывает строки через
", "вместо"\n", то есть содержимое не совпадает; - мутант для теста 3: функция при пустом списке не создаёт файл (тело —
passпри пустомlines).
