使用Given-When-Then模式的switch-case的测试方法

时间:2016-03-12 13:22:48

标签: c# unit-testing testing legacy-code

我的遗留代码包含的代码看起来有点像这样:

public bool Execute(MyArgument arg)
{
    if(arg.Condition)
    {
        switch(arg.Data)
        {
            case DataValue.A:
            case DataValue.B:
            case DataValue.C:
                return false;   
            case DataValue.F:
            case DataValue.G:
            case DataValue.H:
                return true;
        }
    }
    else
    {
        arg.DoSomeStuff();
        return true;
    }
}

我们正在使用Given-When-Then模式,我的问题是我应该用这样的测试来测试它:

  

使用条件True和DataValue A执行时给定NewContext然后   返回错误

     

给出NewContext,当条件为True时执行,然后是DataValue B.   返回错误

     

给出NewContext时执行条件为True和DataValue C然后   返回错误

     

给出NewContext,当条件为True时执行,然后是DataValue D.   返回true

     

给出NewContext时执行条件为True和DataValue E然后   返回true

     

给出NewContext,当条件为True时执行,然后是DataValue   返回true

     

在条件为False时执行NewContext然后DoSomeStuff   应该被调用然后返回true

或者您认为有更好的方法吗? (如果您认为我的测试有效,请在评论中尽快说出来。)

1 个答案:

答案 0 :(得分:2)

我认为你得到的很好。就个人而言,我喜欢冗长而不是更短暂的东西。至少它显然是你正在测试的东西。

您也可以考虑利用NUnit中的TestCase属性。

[Test]
[TestCase(DataValue.A, false)]
[TestCase(DataValue.B, false)]
[TestCase(DataValue.C, false)]
[TestCase(DataValue.F, true)]
[TestCase(DataValue.G, true)]
[TestCase(DataValue.H, true)]
public void GetExpectedValueWhenConditionIsTrue(DataValue argData, bool expectedResult)
{
    var c = new YourClass();
    var arg = new MyArgument { Condition = true, Data = argData };

    var actualResult = c.Execute(arg);

    Assert.AreEqual(expectedResult, actualResult);
}