Ответ
State Transition Testing — это техника тест-дизайна, которая фокусируется на проверке корректности переходов системы между различными состояниями в ответ на события или входные данные. Она особенно полезна для систем с конечным числом состояний (finite-state machines), где результат зависит от истории предыдущих действий.
Основная идея: система может находиться в определенном состоянии (State), и событие (Event) переводит ее в другое состояние, возможно, с каким-то действием (Action). Тестирование проверяет как валидные, так и невалидные переходы.
Пример для банкомата:
- Состояние:
Карта вставлена→ Событие:Ввод корректного PIN→ Новое состояние:Доступ разрешен. - Состояние:
Карта вставлена→ Событие:Ввод неверного PIN 3 раза→ Новое состояние:Карта заблокирована.
Пример тест-кейса на Python:
class LoginSystem:
def __init__(self):
self.state = "LOGGED_OUT"
self.attempts = 0
def enter_password(self, pwd):
if pwd == "correct":
self.state = "LOGGED_IN"
else:
self.attempts += 1
if self.attempts >= 3:
self.state = "LOCKED"
def test_state_transition_to_locked():
system = LoginSystem()
# Три неверные попытки
for _ in range(3):
system.enter_password("wrong")
assert system.state == "LOCKED"
Когда применять: тестирование workflow (заказ товара, процесс одобрения), логики авторизации, бизнес-процессов с четкими этапами.