我继承了一个大型且相当复杂的状态机。它有 31 种可能的状态,都是真正需要的(大业务流程)。它有以下输入:
- 枚举:当前状态(所以 0 -> 30)
- 枚举:来源(目前只有 2 个条目)
- 布尔值:请求
- 布尔值:类型
- 枚举:状态(3 个状态)
- 枚举:处理(3 个状态)
- 布尔值:已完成
将其分解为单独的状态机似乎不可行,因为每个状态都是不同的。我为最常见的输入编写了测试,每个输入一个测试,所有输入都保持不变,除了状态。
[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)的东西。
您对测试状态机有什么建议?
编辑:我正在考虑所有建议,当我找到一个最有效的答案时会标记答案。