在这种情况下我应该对所有可能的输入进行单元测试吗

时间:2017-07-14 07:44:28

标签: c# .net unit-testing testing tdd

我有一个带有以下签名的方法:

ConfigTreeNode FilterFirstChild<T>(Func<ConfigTreeNode, T> getProp, T key)

用法如下:

MyObj.FilterFirstChild(x => x.Prop1, "foo") //assuiming Prop1 is a string

来电者可以使用任何财产代替Prop1(即Prop2Prop3)。

现在我的问题是我应该编写涵盖所有可能属性的多个单元测试吗?

public void FilterFirstChild_GivenChildProp1_ReturnsCorrectChild()
public void FilterFirstChild_GivenChildProp2_ReturnsCorrectChild()
public void FilterFirstChild_GivenChildProp3_ReturnsCorrectChild()

或者我应该编写一个测试一般工作行为的测试

public void FilterFirstChild_GivenChildProp_ReturnsCorrectChild() // not prop1, prop2... etc

如果这是一个愚蠢的问题,请道歉。

1 个答案:

答案 0 :(得分:5)

通常,单元测试的目的是覆盖场景(即if-conditions),而不是所有可能的数据输入。如果处理来自Prop1的{​​{1}}之间存在任何差异,那么涵盖两者都是有意义的。如果没有 - 留下通用测试是可以的。

另外值得一提的是,单元测试框架通常有一个工具来针对多组数据运行测试。例如Prop2NUnit

TestCaseAttribute