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

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)

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

Art*_*tem 5

通常,单元测试的目的是覆盖场景(即if-conditions),而不是所有可能的数据输入.如果没有处理任何区别Prop1Prop2,所以它是有意义的涵盖.如果没有 - 留下通用测试是可以的.

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

[Test]
[TestCase(SomeEnum.SomeValue)]
public void MethodName_Condition_ThrowsException(SomeEnum someValue)
{
//...
}
Run Code Online (Sandbox Code Playgroud)