Ответ
Процесс написания тестов для функции строится вокруг стандартного паттерна Arrange-Act-Assert (AAA) или Given-When-Then.
Общий алгоритм:
-
Определение сценариев: Проанализировать функцию и определить, что нужно протестировать.
- Позитивные сценарии: Работа с корректными, ожидаемыми данными.
- Негативные сценарии: Реакция на некорректные данные (неверный тип, формат).
- Граничные случаи: Проверка на крайних значениях (пустые строки,
0,None, максимальные значения).
-
Написание теста для каждого сценария по структуре AAA:
- Arrange (Подготовка): Создать все необходимые условия и входные данные для теста. Инициализировать объекты, подготовить моки (mocks).
- Act (Действие): Вызвать тестируемую функцию с подготовленными данными.
- Assert (Проверка): Сравнить полученный результат с ожидаемым. Убедиться, что состояние системы изменилось так, как предполагалось, или что было вызвано нужное исключение.
Пример с pytest для функции add:
# Функция, которую мы тестируем
def add(a, b):
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("Оба аргумента должны быть числами")
return a + b
# --- Тесты ---
import pytest
def test_add_positive_numbers():
# Arrange (Подготовка)
num1 = 5
num2 = 10
expected_result = 15
# Act (Действие)
actual_result = add(num1, num2)
# Assert (Проверка)
assert actual_result == expected_result
def test_add_negative_numbers():
# AAA в одну строку для простых случаев
assert add(-2, -3) == -5
def test_add_with_zero():
assert add(10, 0) == 10
def test_add_raises_type_error_for_string():
# Для проверки исключений используется контекстный менеджер
with pytest.raises(TypeError):
# Act & Assert происходят здесь
add("2", 3)