Короткий ответ
AAA — это структура теста из трёх частей: подготовка данных и окружения (Arrange), вызов проверяемого кода (Act) и проверка результата (Assert); она делает тесты читаемыми и предсказуемыми по структуре.
Как это работает подробнее
В Arrange создаются входные данные, моки и зависимые объекты, необходимые именно для этого сценария. В Act вызывается ровно та функция или метод, поведение которых проверяется, и больше ничего. В Assert сравнивается фактический результат с ожидаемым, обычно одним или несколькими логически связанными утверждениями об одном и том же поведении.
Пример кода
testing_example_298.py
def test_apply_discount_to_order():
# Arrange
order = Order(items=[Item(price=100)], coupon="SALE10")
# Act
total = order.calculate_total()
# Assert
assert total == 90Что использовать на практике
- Практика. Явное разделение частей (даже просто пустой строкой или комментарием) облегчает чтение теста спустя время и ревью — сразу видно, что именно подготовлено, что вызывается и что именно проверяется. Это особенно важно в длинных тестах с несколькими моками или сложной подготовкой данных, где легко потерять нить повествования.
Подводные камни
- Риск. Перемешивать Act и Assert, вызывая функцию несколько раз с разными проверками внутри одного теста, что усложняет диагностику того, какой именно вызов привёл к падению. Делать Arrange слишком большим и непрозрачным, пряча в фикстурах важные для понимания сути теста детали, из-за чего читателю приходится переходить по нескольким файлам.