Claude Код 👁 11

Написание unit-тестов на pytest

Готовый набор тестов с фикстурами и параметризацией. Сразу запускается через `pytest -v`.

Промпт Запустить →
Напиши файл тестов на pytest для функции ниже. Верни один блок кода, который запускается командой pytest -v без правок и без дописывания.

Код: [КОД:
def shipping_cost(weight_kg, zone, express=False):
    if weight_kg <= 0:
        raise ValueError("вес должен быть больше нуля")
    base = {"msk": 300, "region": 500}[zone]
    cost = base + max(0, weight_kg - 1) * 80
    return round(cost * 1.6) if express else round(cost)
]
Строка импорта: [ИМПОРТ: from delivery.pricing import shipping_cost]
Что нельзя дёргать из тестов: [ВНЕШНЕЕ: ничего, функция чистая]

Собери так: на каждую ветку кода — свой тест с говорящим именем; параметризация @pytest.mark.parametrize там, где тесты отличаются только числами; исключения — через pytest.raises с проверкой текста сообщения; фикстура появляется только тогда, когда один и тот же набор данных нужен разным тестам; мок — только для того, что названо в поле ВНЕШНЕЕ. Не больше двенадцати тестов.

Отсечка. Не пиши тестов к тому, как функция должна была бы работать: валидацию, которой в коде нет, никто не проверяет. Не импортируй из выдуманного модуля — бери строку из поля ИМПОРТ как есть. Не обкладывай код пояснениями до и после: комментарий уместен внутри теста и только там, где неочевидно ожидаемое число. Строка assert result без ожидаемого значения тестом не считается.

Проверка. Прогони файл в уме как интерпретатор: импорты собраны сверху, каждая фикстура объявлена раньше, чем использована, в parametrize число аргументов совпадает с числом параметров, ни один тест не зависит от порядка запуска и от сегодняшней даты. Потом пересчитай каждое ожидаемое значение по формуле из кода — взятое на глаз число превращает тест в фиксацию случайного результата, такой тест убери.
Запустить промпт →

Пример результата

```python import pytest from mymodule import calculate_discount @pytest.fixture def sample_order(): return {'total': 1000, 'user_type': 'regular'} @pytest.mark.parametrize('total,user_type,expected', [ (1000, 'regular', 100), # 10% (1000, 'vip', 200), # 20% (0, 'regular', 0), # граница (-100, 'regular', 0), # отрицательное → 0 ]) def test_discount_happy_paths(total, user_type, expected): assert calculate_discount(total, user_type) == expected def test_discount_invalid_user_type_raises(): with pytest.raises(ValueError, match='unknown user_type'): calculate_discount(1000, 'alien') ```

Похожие промпты

Рефакторинг легаси-модуля в Kimi: карта, план, код по шагам
Kimi
Рефакторинг легаси-модуля в Kimi: карта, план, код по шагам
Kimi
Сайт-визитка с 3D одним промптом — Kimi K3
DeepSeek
Телеграм-бот на n8n в DeepSeek: схема нод, которую можно собрать за вечер
Claude
Системный промпт для AI Agent ноды n8n — Claude

Полезные статьи

Промт для натальной карты: три промпта и проверка расчёта
Промт для резюме под вакансию: разбор промпта на живых прогонах
Промт для игры Лила в чате GPT: 3 готовых промпта и доска на 72 клетки

Все гайды →