Claude Код 👁 27

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

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

Промпт Запустить →
Промокод — до 25% бонусами к первому пополнению в most-ai
Напиши файл тестов на 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 число аргументов совпадает с числом параметров, ни один тест не зависит от порядка запуска и от сегодняшней даты. Потом пересчитай каждое ожидаемое значение по формуле из кода — взятое на глаз число превращает тест в фиксацию случайного результата, такой тест убери.
Запустить промпт →

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

Claude
Рефакторинг функции Python по принципам clean code
Claude
Миграция кода Python 2 → Python 3 с проверкой совместимости
Claude
Расстановка type hints в legacy Python-коде
DeepSeek
TDD-цикл red-green-refactor для новой функции
DeepSeek
DeepSeek: Python-калькулятор сметы на ремонт
DeepSeek
Профилирование медленного Python-кода — поиск bottleneck
DeepSeek
DeepSeek: рефакторинг легаси-функции пошагово
ChatGPT
Docstring Python в Google-стиле по сигнатуре функции

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

```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') ```

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

Промты для программиста: 43 промпта под задачи кода
Промт для создания игры: 8 промптов от идеи до игры
Workflow ComfyUI на русском: Flux, Qwen и Wan 2.2

Все гайды →