Ответ
Для тестирования логических цепочек со сменой статусов оптимально применять Технику тестирования переходов состояний (State Transition Testing).
Суть метода: Система представляется как конечный автомат с набором состояний (статусов). Тестируются корректные и некорректные переходы между ними в ответ на события.
Практический пример (Процесс заказа):
# Пример кода для проверки переходов статусов заказа
class Order:
def __init__(self):
self.status = "NEW"
self.allowed_transitions = {
"NEW": ["PROCESSING", "CANCELLED"],
"PROCESSING": ["SHIPPED", "CANCELLED"],
"SHIPPED": ["DELIVERED"],
"DELIVERED": [],
"CANCELLED": []
}
def change_status(self, new_status):
if new_status in self.allowed_transitions[self.status]:
self.status = new_status
else:
raise ValueError(f"Invalid transition from {self.status} to {new_status}")
# Тест на валидный переход
order = Order()
order.change_status("PROCESSING")
assert order.status == "PROCESSING"
# Тест на невалидный переход (должен вызвать ошибку)
try:
order.change_status("DELIVERED")
assert False, "Should have raised an error"
except ValueError:
assert True
Что необходимо проверить с помощью этой техники:
- Все валидные переходы, указанные в спецификации.
- Невалидные переходы (например, попытка перевести заказ из
DELIVEREDобратно вPROCESSING). Система должна обрабатывать их корректно (выдавать ошибку, игнорировать). - Граничные состояния (начальное и конечное).
- Побочные эффекты перехода (например, при смене статуса на
SHIPPEDдолжна создаваться накладная).
Для наглядности и полноты покрытия часто строят Таблицу/Диаграмму переходов состояний.