Unittest一个statemachine

时间:2013-04-12 19:54:38

标签: .net unit-testing state

我是新来的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);
        }
    }
}

如何正确测试这样的状态机?这个具体的状态机只是一个示例实现。正确的实现有更多的状态和转换条件。

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。

如果您真的使用严格的“状态机”模式,则需要通过monad处理副作用。

如果你只是想在几次输入后测试状态,你可以输入几个输入,然后测试你期望它进入的状态。