1
我是C#
和他们的单元测试设备的新手。我写了使用state
模式的状态机GoF
Unittest a statemachine
public class Program
{
private static void Main()
{
var c = new Context(SimpleStateMachine.StateInit);
c.Run();
Console.Read();
}
}
public static class SimpleStateMachine
{
public static void StateInit(Context context)
{
// ... do some init
context.State = StateConfigure;
}
public static void StateConfigure(Context context)
{
// do some conifigure
context.State = StateMeasurement;
}
public static void StateMeasurement(Context context)
{
// do some measurement
context.State = GetMeasurement()? StateConfigure : StateFinished;
}
public static void StateFinished(Context context)
{
// do some deinit
context.State = (Action<Context>)null;
}
}
public class Context
{
public Action<Context> State { get; internal set; }
public Context(Action<Context> state)
{
State = state;
}
public void Run()
{
while (State != null)
{
State(this);
}
}
}
如何正确测试这种的statemachine?这个具体的状态机只是一个示例实现。正确的实现有更多的状态和转换条件。
我编辑我的问题有一个更复杂的' FSM'。 FSM本身根据输入文件实施测量。在任何情况下,最后一个状态应该是FinishState。但是如何测试正确的状态顺序?另外如何测试每个状态被调用的正确时间? – Razer
@Razer,你可以模拟出各个状态,以确定每次输入后状态是否正确。 – Codeman