Ответ
Для тестирования логических цепочек со сменой статусов оптимально применять Технику тестирования переходов состояний (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должна создаваться накладная).
Для наглядности и полноты покрытия часто строят Таблицу/Диаграмму переходов состояний.
Ответ 18+ 🔞
Да ты посмотри, какая хуйня интересная вырисовывается! Вот сидишь ты, тестировщик, и думаешь: "Ну как, блядь, проверить эту вашу логику смены статусов, чтобы она не глючила, как мартышлюшка на банане?" А ответ-то простой, как хуй в пальто — Техника тестирования переходов состояний (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
Видишь? Всё просто, как три копейки. Создал заказ — он NEW. Перевёл в PROCESSING — ок, так можно. А вот если с PROCESSING сразу в DELIVERED рвануть — получишь по ебалу ошибкой, и правильно, пидарас шерстяной!
Так на что же, блядь, смотреть, когда тестируешь?
- Все разрешённые переходы. Каждый хуй из спецификации должен отрабатывать чётко, без запинки. Из А в Б, из Б в В.
- Все запрещённые переходы. Вот это самое весёлое! Пытаешься сделать хуйню — из "отменён" в "доставлен". Система должна тебя послать нахуй красиво, с ошибкой, а не молча сломаться.
- Состояния-крайности. Начальное и конечное. Вошёл в конечное — сиди, не рыпайся, выхода нет.
- Побочки. А то бывает, статус сменился, а письмо не отправилось, или запись в лог не легла. Надо смотреть, чтобы при переходе вся сопутствующая хуйня тоже происходила.
И самое главное — не будь мудаком, как тот Герасим из рассказа. Нарисуй себе диаграмму или таблицу переходов, наглядную такую. А то запутаешься в своих же статусах, и волнение ебать накроет. С таблицей всё видно: откуда, куда и можно ли. Красота, ёпта!