use*_*467 1 .net c# testing tdd unit-testing
我有一个带有以下签名的方法:
ConfigTreeNode FilterFirstChild<T>(Func<ConfigTreeNode, T> getProp, T key)
Run Code Online (Sandbox Code Playgroud)
用法如下:
MyObj.FilterFirstChild(x => x.Prop1, "foo") //assuiming Prop1 is a string
Run Code Online (Sandbox Code Playgroud)
调用者可以代替使用任何财产Prop1
(即Prop2
,Prop3
).
现在我的问题是我应该编写涵盖所有可能属性的多个单元测试吗?
即
public void FilterFirstChild_GivenChildProp1_ReturnsCorrectChild()
public void FilterFirstChild_GivenChildProp2_ReturnsCorrectChild()
public void FilterFirstChild_GivenChildProp3_ReturnsCorrectChild()
Run Code Online (Sandbox Code Playgroud)
或者我应该编写一个测试一般工作行为的测试
即
public void FilterFirstChild_GivenChildProp_ReturnsCorrectChild() // not prop1, prop2... etc
Run Code Online (Sandbox Code Playgroud)
如果这是一个愚蠢的问题,请道歉.
通常,单元测试的目的是覆盖场景(即if-conditions),而不是所有可能的数据输入.如果没有处理任何区别Prop1
从Prop2
,所以它是有意义的涵盖.如果没有 - 留下通用测试是可以的.
另外值得一提的是,单元测试框架通常有一个工具来对多组数据运行测试.例如NUnit
有TestCaseAttribute
:
[Test]
[TestCase(SomeEnum.SomeValue)]
public void MethodName_Condition_ThrowsException(SomeEnum someValue)
{
//...
}
Run Code Online (Sandbox Code Playgroud)