Проверьте совпадение суммы, несовпадение, значение по умолчанию и отсутствие файла. Сначала исправьте Path.join: используйте Path(base) / file_name.
Тестовый набор для функции сравнения суммы CSV‑данных
Проверьте совпадение суммы, несовпадение, значение по умолчанию и отсутствие файла. Сначала исправьте Path.join: используйте Path(base) / file_name.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте несколько юнит‑тестов для функции check_data, которая читает CSV‑файл, вычисляет сумму всех чисел и сравнивает её с заданным значением.
def check_data(file_name: str, target_sum: int = 10) -> bool | NoReturn:
file_path = Path.join(settings.BASE_PATH, file_name)
if not file_path.exists():
raise NoFileError
df = pd.read_csv(file_path, sep=",", header=None)
if df.values.sum() == target_sum:
return True
return False
Тесты должны проверять корректность работы функции при наличии файла, отсутствии файла и при разных значениях суммы.
Ответ
Проверьте совпадение суммы, несовпадение, значение по умолчанию и отсутствие файла. Сначала исправьте Path.join: используйте Path(base) / file_name.
Предположим, функция находится в модуле report. Тесты после исправления построения пути:
import pytest
import report
@pytest.mark.parametrize('target,expected', [(10, True), (9, False), (0, False)])
def test_sum(tmp_path, monkeypatch, target, expected):
monkeypatch.setattr(report.settings, 'BASE_PATH', tmp_path)
(tmp_path / 'numbers.csv').write_text('1,2\n3,4\n', encoding='utf-8')
assert report.check_data('numbers.csv', target) is expected
def test_default(tmp_path, monkeypatch):
monkeypatch.setattr(report.settings, 'BASE_PATH', tmp_path)
(tmp_path / 'numbers.csv').write_text('10\n', encoding='utf-8')
assert report.check_data('numbers.csv') is True
def test_missing(tmp_path, monkeypatch):
monkeypatch.setattr(report.settings, 'BASE_PATH', tmp_path)
with pytest.raises(report.NoFileError):
report.check_data('missing.csv')
У pathlib.Path нет метода join. Также достаточно возвращаемой аннотации bool: возможные исключения не требуют объединения с NoReturn. Пустой CSV и нечисловые данные проверяйте отдельно согласно контракту.