Тестирование с pytest

Первые тесты на pytest: нормальные сценарии, граничные случаи и исключения

Содержание курса

Напиши тесты для функции safe_divide

Ты пишешь набор тестов для функции safe_divide из модуля mathutils.

Что уже дано

Проверяющая система скрыто создаёт модуль mathutils.py со следующей функцией:

def safe_divide(a: float, b: float) -> float:
 """Делит a на b. Если b == 0, поднимает ValueError с сообщением 'деление на ноль'."""

Этот модуль уже доступен для импорта по имени mathutils. Никаких других файлов или переменных заранее не создаётся.

В редакторе есть каркас с тремя незавершёнными тест-функциями и уже готовым импортом.

Что нужно сделать

Допиши три тест-функции в редакторе:

  1. test_safe_divide_normal — нормальный сценарий: проверь, что safe_divide(10, 4) возвращает 2.5.
  2. test_safe_divide_zero_dividend — граничный случай: проверь, что safe_divide(0, 5) возвращает 0.0.
  3. test_safe_divide_by_zero_raises — проверь через pytest.raises(ValueError), что safe_divide(7, 0) поднимает ValueError, и убедись, что сообщение исключения содержит подстроку 'деление на ноль'.

Каждая тест-функция должна содержать хотя бы один assert (или блок pytest.raises) непосредственно в своём теле.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно.

Проверяющая система после выполнения твоего кода сама запускает тест-функции, используя их по имени из глобального пространства имён.

Пример использования

print(safe_divide(10, 4))
try:
    safe_divide(7, 0)
except ValueError as error:
    print(error)

Результат:

2.5
деление на ноль
О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

РешениеPython · Python 3.12 (data: numpy, pandas, sklearn...)
Как проверяется решение

Проверяются функции и их результаты. Собственный запуск выполняет ваш код без авторских тестов. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

Отправьте решение, чтобы увидеть результаты тестов.