2010-04-06 62 views
2

我在應用程序中有各種對象,並且每個對象都有無效的方法來測試所有屬性的值是否正確設置(按照業務規則)。現在,爲了測試每個違反是有效的拋出錯誤,我將不得不寫作儘可能多的測試作爲規則被檢查isvalid.Is有一個更簡單的方法來做到這一點?我正在使用MBunit。如何爲具有多個屬性的對象編寫單元測試

+0

我決定做行測 – jess 2010-04-06 07:12:25

回答

1

我不確定你想變得更簡單。您可能希望創建一個輔助方法來創建一個有效的對象下手,讓每個測試是一樣的東西:

public void FooWithNullNameIsInvalid() 
{ 
    Foo foo = CreateValidFoo(); 
    foo.Name = null; 
    Assert.IsFalse(foo.IsValid); 
} 

然後每個測試比較小,測試一兩件事,是很容易理解。是的,這種事情可能有點單調,但它的工作原理。

另一種選擇,使測試更短會:

private void AssertInvalidChange(Action<Foo> change) 
{ 
    Foo foo = CreateValidFoo(); 
    change(foo); 
    Assert.IsFalse(foo.IsValid); 
} 

然後每個測試可以只是形式:

public void FooWithNullNameIsInvalid() 
{ 
    AssertInvalidChange(foo => foo.Name = null); 
} 

現在在這個階段,你可以把所有的以單一方法進行有效性測試,每次無效更改一行。這肯定會更簡單,但它會違反「唯一測試一件事」的口頭禪。就我個人而言,我相當寬鬆 - 我會非常強烈地想要這樣做。缺點是如果你有多個測試失敗,你一次只能看到一個失敗。

+0

的確有意思! – jess 2010-04-06 07:13:49

0

您可能想要考慮在您的SUT中是否需要複製測試工作並不表示代碼複製

也許您可以將業務規則實施爲Strategy,在這種情況下,您只需測試一次策略實施,然後對每個SUT驗證他們是否使用了正確的策略。

否則,一組Parameterized Tests聽起來像是要走的路。