Я унаследовал большой и довольно сложный конечный автомат. Он имеет 31 возможное состояние, все действительно необходимы (крупный бизнес-процесс). Он имеет следующие входы:
- Enum: Текущее состояние (так 0 → 30)
- Enum: source (в настоящее время только 2 записи)
- Boolean: Request
- Boolean: Тип
- Enum: Status (3 состояния)
- Перечисление: обработка (3 состояния)
- Boolean: завершено
Разбить его на отдельные государственные машины не представляется возможным, поскольку каждое состояние отличается. Я написал тесты для наиболее распространенных входов с одним тестом на каждый вход, все входы постоянны, за исключением состояния.
[Subject("Application Process States")]
public class When_state_is_meeting2Requested : AppProcessBase
{
Establish context = () =>
{
//Setup....
};
Because of = () => process.Load(jas, vac);
It Current_node_should_be_meeting2Requested = () => process.CurrentNode.ShouldBeOfType<meetingRequestedNode>();
It Can_move_to_clientDeclined = () => Check(process, process.clientDeclined);
It Can_move_to_meeting1Arranged = () => Check(process, process.meeting1Arranged);
It Can_move_to_meeting2Arranged = () => Check(process, process.meeting2Arranged);
It Can_move_to_Reject = () => Check(process, process.Reject);
It Cannot_move_to_any_other_state = () => AllOthersFalse(process);
}
Никто не уверен, какой должен быть выход для каждого состояния и набора входов. Я начал писать тесты для этого. Однако мне нужно написать что-то вроде тестов 4320 (30 * 2 * 2 * 2 * 3 * 3 * 2).
Какие предложения у вас есть для проверки состояния машин?
Изменить: Я играю со всеми предложениями и отмечу ответ, когда найду тот, который лучше всего работает.