Ответ
Для тестирования состояний и переходов используется диаграмма состояний и переходов (State Transition Diagram). Это техника тест-дизайна, которая помогает систематически проверить поведение системы в разных состояниях.
Основные шаги:
- Определите все состояния системы (например, для корзины:
EMPTY,FILLED,PENDING_PAYMENT,PAID). - Постройте граф переходов, где узлы — состояния, а рёбра — события/действия, вызывающие переход.
- Спроектируйте тесты, покрывающие:
- Все валидные переходы (позитивные тесты).
- Невалидные переходы (негативные тесты — система должна корректно обрабатывать ошибки).
- Сохранение данных при смене состояния.
Пример теста для корзины интернет-магазина (Python/pytest):
def test_cart_state_transitions():
cart = ShoppingCart()
# Начальное состояние
assert cart.state == "EMPTY"
# Валидный переход: EMPTY -> FILLED
cart.add_item("Laptop")
assert cart.state == "FILLED"
# Валидный переход: FILLED -> PENDING_PAYMENT
cart.checkout()
assert cart.state == "PENDING_PAYMENT"
# Невалидный переход: попытка оплатить пустую корзину
empty_cart = ShoppingCart()
with pytest.raises(InvalidStateError):
empty_cart.process_payment()
Ключевые проверки:
- Покрыты ли все возможные переходы из каждого состояния?
- Корректно ли обрабатываются запрещённые переходы (например, вызов
checkout()для пустой корзины)? - Сохраняются ли данные (например, товары в корзине) после перехода между состояниями?
- Восстанавливается ли система после ошибки перехода?