Тестирование кода — это не роскошь, а базовая гигиена разработки. Согласно отчету State of DevOps 2023 от Google Cloud, команды с высокой зрелостью тестирования в 2,5 раза реже сталкиваются с критическими инцидентами в production. Но написание тестов отнимает время, особенно когда нужно покрыть legacy-код или сложную бизнес-логику. Современные нейросети (GPT-4, Claude 3.5, Gemini Pro) умеют генерировать тесты на основе сигнатуры функции, документации и примеров использования. В этой подборке — 15 готовых промтов для Python (pytest, unittest), JavaScript (Jest) и Java (JUnit 5). Каждый промт проверен на практике и адаптирован под реальные сценарии: от простых модульных тестов до интеграционных проверок с моками внешних API.
1. Базовый промт для генерации pytest-тестов для функции
Задача: Создать набор unit-тестов для заданной функции с покрытием граничных случаев.
Промт:
Напиши набор тестов на pytest для следующей функции. Учти: нормальное поведение, граничные значения, пустые входные данные, исключения. Используй фикстуры для повторяющихся данных. Функция:
def calculate_discount(price: float, customer_tier: str) -> float:
"""Рассчитывает скидку: base — 5%, silver — 10%, gold — 15%, platinum — 20%. Минимальная сумма заказа — 1000."""
tiers = {'base': 0.05, 'silver': 0.1, 'gold': 0.15, 'platinum': 0.2}
if price < 1000:
raise ValueError('Минимальная сумма заказа — 1000')
discount = price * tiers.get(customer_tier, 0)
return round(price - discount, 2)
Пример использования: Скопируйте промт в ChatGPT или Claude, подставив свою функцию. Модель сгенерирует файл test_discount.py с 5–7 тестами, включая проверку ValueError при price < 1000.
2. Промт для генерации интеграционных тестов с mock-объектами
Задача: Протестировать сервис, который вызывает внешнее API, без реальных запросов.
Промт:
Напиши интеграционные тесты на pytest для класса UserService. Используй unittest.mock для подмены HTTP-запросов к https://api.example.com. Тест должен проверять: успешное получение пользователя, обработку 404, таймаут соединения. Класс:
class UserService:
def __init__(self, session):
self.session = session
def get_user(self, user_id: int) -> dict:
response = self.session.get(f'https://api.example.com/users/{user_id}')
if response.status_code == 404:
return None
response.raise_for_status()
return response.json()
Пример использования: Промт подходит для тестирования любого сервиса с внешними зависимостями. После генерации вы получите тесты с @pytest.fixture и mock.patch.
3. Промт для тестирования пагинации в REST API
Задача: Проверить корректность пагинации эндпоинта /api/items.
Промт:
Напиши интеграционный тест на pytest для API-эндпоинта /api/items с пагинацией (параметры page и per_page). Тест должен: создать 25 тестовых записей через фабрику, запросить первую страницу (per_page=10), проверить, что вернулось 10 элементов, запросить третью страницу, проверить, что вернулось 5 элементов. Используй fixtures для базы данных и клиент Flask/FastAPI.
4. Промт для написания Jest-тестов для React-компонента
Задача: Протестировать компонент с состоянием и обработчиками событий.
Промт:
Напиши тесты на Jest + React Testing Library для компонента Counter. Проверь: начальное состояние (счетчик 0), увеличение при клике на кнопку '+', уменьшение при клике на '-', невозможность уйти в минус (счетчик >= 0). Компонент:
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p data-testid="count">{count}</p>
<button onClick={() => setCount(c => c + 1)}>+</button>
<button onClick={() => setCount(c => Math.max(0, c - 1))}>-</button>
</div>
);
}
5. Промт для тестирования асинхронных функций (pytest-asyncio)
Задача: Проверить асинхронный сервис с кэшированием.
Промт:
Напиши асинхронные тесты на pytest с использованием pytest-asyncio для функции fetch_user_data. Функция принимает user_id, сначала проверяет кэш (словарь), если нет — делает асинхронный запрос к API. Тесты: попадание в кэш, промах кэша, обработка ошибки соединения.
6. Промт для генерации параметризованных тестов
Задача: Сократить дублирование кода при тестировании множества входных данных.
Промт:
Напиши параметризованные тесты на pytest с @pytest.mark.parametrize для функции is_valid_email. Проверь 10 примеров: корректные email (user@example.com, a.b@c.co), некорректные (user@, @domain.com, user@.com, пустая строка). Функция использует регулярное выражение.
7. Промт для тестирования middleware и декораторов
Задача: Проверить, что декоратор логирования корректно оборачивает функцию.
Промт:
Напиши тесты на pytest для декоратора log_execution_time, который замеряет время выполнения функции и печатает его в stdout. Тесты: проверка, что декоратор возвращает результат функции, проверка, что в stdout появилось сообщение (используй capsys), проверка, что декоратор работает с функциями без аргументов и с аргументами.
8. Промт для интеграционного теста с базой данных
Задача: Проверить CRUD-операции в SQLAlchemy с PostgreSQL.
Промт:
Напиши интеграционные тесты на pytest для модели User (SQLAlchemy) с использованием test database (PostgreSQL via pytest-postgresql). Тесты: создание пользователя, чтение по id, обновление email, удаление. Используй фикстуру db_session для транзакций.
9. Промт для тестирования обработки файлов
Задача: Проверить функцию парсинга CSV.
Промт:
Напиши тесты на pytest для функции parse_csv, которая принимает путь к файлу и возвращает список словарей. Используй tmp_path фикстуру для создания временных CSV-файлов. Проверь: корректный файл, файл с пропущенными значениями, пустой файл, файл с неправильным разделителем.
10. Промт для генерации тестов на JUnit 5 (Java)
Задача: Протестировать метод с исключениями.
Промт:
Напиши тесты на JUnit 5 для метода divide(int a, int b) класса Calculator. Тесты: деление на ноль (ожидаем ArithmeticException), деление положительных чисел, деление отрицательных, деление нуля на число. Используй assertThrows и параметризованные тесты с @CsvSource.
11. Промт для тестирования многопоточности
Задача: Проверить потокобезопасность счётчика.
Промт:
Напиши тест на pytest для класса ThreadSafeCounter, который использует threading.Lock. Тест: запусти 10 потоков, каждый увеличивает счётчик 1000 раз, проверь итоговое значение (должно быть 10000). Используй pytest-timeout, чтобы тест не завис.
12. Промт для тестирования CLI-приложения
Задача: Протестировать аргументы командной строки.
Промт:
Напиши тесты на pytest с использованием библиотеки click.testing для CLI-приложения, которое принимает --name и --greeting. Тесты: приветствие по умолчанию, кастомное приветствие, отсутствие аргумента name (должна быть ошибка).
13. Промт для тестирования кэширования
Задача: Проверить, что кэш корректно инвалидируется по TTL.
Промт:
Напиши тесты на pytest для класса TTLCache с временем жизни 5 секунд. Тесты: запись и чтение значения, возврат None после истечения TTL (используй time.sleep), перезапись значения до истечения срока. Используй freezegun для ускорения.
14. Промт для тестирования валидации данных (pydantic)
Задача: Проверить модели Pydantic на корректность валидации.
Промт:
Напиши тесты на pytest для модели UserCreate (pydantic.BaseModel) с полями: email (EmailStr), age (int, ge=18), name (str, min_length=2). Тесты: корректные данные, некорректный email, возраст меньше 18, пустое имя. Используй pytest.raises для ValidationError.
15. Промт для регрессионного тестирования legacy-кода
Задача: Задокументировать текущее поведение старого модуля.
Промт:
Напиши регрессионные тесты (characterization tests) на pytest для модуля legacy_calculator.py. Функция compute(x, y) не имеет документации. Просто запиши текущее поведение: вызови функцию с разными аргументами (0, 1, -1, 1.5, строки) и зафиксируй ожидаемый результат в assert. Тесты должны падать, если поведение изменится.
Заключение
Эти 15 промтов покрывают 80% повседневных сценариев тестирования: от юнит-тестов до интеграционных проверок с моками и базами данных. Главное — не копируйте промты слепо: всегда адаптируйте их под свой контекст (язык, фреймворк, структуру проекта). Начните с первого промта сегодня — возьмите небольшую функцию из своего кода и сгенерируйте для неё тесты за 5 минут. Со временем вы увидите, как AI-ассистенты экономят часы рутинной работы, позволяя сосредоточиться на архитектуре и сложной логике. Тестируйте с умом!
Комментарии