使用 Given-When-Then 模式的 switch-case 测试方法
Testing method with switch-case using Given-When-Then pattern
我有遗留代码,其中包含看起来有点像这样的代码:
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 模式,我的问题是我应该用这样的测试来测试它:
Given NewContext When Execute with Condition True and DataValue A Then
return false
Given NewContext When Execute with Condition True and DataValue B Then
return false
Given NewContext When Execute with Condition True and DataValue C Then
return false
Given NewContext When Execute with Condition True and DataValue D Then
return true
Given NewContext When Execute with Condition True and DataValue E Then
return true
Given NewContext When Execute with Condition True and DataValue F Then
return true
Given NewContext When Execute with Condition False Then DoSomeStuff
should be called Then return true
或者您有什么更好的方法吗? (如果你认为我的测试有效,请不要犹豫,在评论中说出来)。
我认为你得到的很好。就个人而言,我更喜欢冗长而不是更短但更不清晰的内容。至少你在测试什么是显而易见的。
您也可以考虑利用 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);
}
我有遗留代码,其中包含看起来有点像这样的代码:
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 模式,我的问题是我应该用这样的测试来测试它:
Given NewContext When Execute with Condition True and DataValue A Then return false
Given NewContext When Execute with Condition True and DataValue B Then return false
Given NewContext When Execute with Condition True and DataValue C Then return false
Given NewContext When Execute with Condition True and DataValue D Then return true
Given NewContext When Execute with Condition True and DataValue E Then return true
Given NewContext When Execute with Condition True and DataValue F Then return true
Given NewContext When Execute with Condition False Then DoSomeStuff should be called Then return true
或者您有什么更好的方法吗? (如果你认为我的测试有效,请不要犹豫,在评论中说出来)。
我认为你得到的很好。就个人而言,我更喜欢冗长而不是更短但更不清晰的内容。至少你在测试什么是显而易见的。
您也可以考虑利用 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);
}