我有一个带有以下签名的方法:
ConfigTreeNode FilterFirstChild<T>(Func<ConfigTreeNode, T> getProp, T key)
用法如下:
MyObj.FilterFirstChild(x => x.Prop1, "foo") //assuiming Prop1 is a string
来电者可以使用任何财产代替Prop1
(即Prop2
,Prop3
)。
现在我的问题是我应该编写涵盖所有可能属性的多个单元测试吗?
即
public void FilterFirstChild_GivenChildProp1_ReturnsCorrectChild()
public void FilterFirstChild_GivenChildProp2_ReturnsCorrectChild()
public void FilterFirstChild_GivenChildProp3_ReturnsCorrectChild()
或者我应该编写一个测试一般工作行为的测试
即
public void FilterFirstChild_GivenChildProp_ReturnsCorrectChild() // not prop1, prop2... etc
如果这是一个愚蠢的问题,请道歉。
答案 0 :(得分:5)
通常,单元测试的目的是覆盖场景(即if-conditions),而不是所有可能的数据输入。如果处理来自Prop1
的{{1}}之间存在任何差异,那么涵盖两者都是有意义的。如果没有 - 留下通用测试是可以的。
另外值得一提的是,单元测试框架通常有一个工具来针对多组数据运行测试。例如Prop2
有NUnit
:
TestCaseAttribute