2017-07-14 30 views
1

我有一個方法與以下簽名:在這種情況下,我應該單元測試所有可能的輸入嗎?

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 

道歉,如果這是一個愚蠢的問題。

回答

5

一般來說,單元測試的目的是覆蓋場景(即if-conditions),而不是所有可能的數據輸入。如果處理Prop1Prop2之間有任何差異,那麼涵蓋兩者都是有意義的。如果沒有 - 留下通用測試是可以的。

另外值得一提的是,單元測試框架通常有一個工具來對多組數據運行測試。例如NUnit已有TestCaseAttribute

[Test] 
[TestCase(SomeEnum.SomeValue)] 
public void MethodName_Condition_ThrowsException(SomeEnum someValue) 
{ 
//... 
} 
相關問題