我是新来的C#
和他们的单位测试设施。我使用state
GoF
模式编写了一个状态机
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);
}
}
}
如何正确测试这样的状态机?这个具体的状态机只是一个示例实现。正确的实现有更多的状态和转换条件。
答案 0 :(得分:1)
有多种方法可以做到这一点。
如果您真的使用严格的“状态机”模式,则需要通过monad处理副作用。
如果你只是想在几次输入后测试状态,你可以输入几个输入,然后测试你期望它进入的状态。