2016-02-14 146 views
0

在xUnit中是否有一種方法僅對特定屬性聲明?xUnit聲明多個屬性

對於給定的實用工具類方法

public static CopyStuff(Oder o1, Order o2) 
{ 
    o1.Name = o2.Name; 
    o1.Age = o2.Age; 
    ... 
} 

有沒有辦法來斷言只在這兩個或多個屬性?而不是寫多個斷言?

我想

// Something like this 
Assert(result, o2, [Name, Age, Blah..]) 

回答

2

如果所討論的類或者實現了自定義Equals(),其作用適當地,或者如果它是一個結構(Equals()做了場逐場默認比較)或匿名類型(Equals()做了屬性逐特性比較),那麼你可以斷言他們在一個斷言中是相等的。

雖然這將是一個壞主意,在複製和平等操作中都可能存在相關的錯誤,這意味着兩者都失敗了,以至於似乎證實另一方已經工作。

這是更好的有多個斷言,如果沒有多個測試。

而在實際的代碼的方便「查了一堆不同的東西都等於」可能是得心應手,在測試中你不希望有一個「檢查一堆不同的東西都是平等的」;你需要一個清晰的「確認姓名相同」,然後清晰地確認「確認年齡是否相等」等等,不僅僅是作爲一種測試,而是作爲測試的明確標誌,並且暗示你期望的工作(有時單元測試比爲新項目開發人員編寫文檔要好,他們說什麼應該如何工作)。

如果你發現你在許多測試中對多個屬性進行同樣的檢查,那麼在測試中本身添加一個AssertAllPropertiesEqual()方法,但在那裏有更多明顯和公然的多個斷言。

1

不,如果不使用反射。即使有反思,我也不會推薦這種方法。單元測試應該比簡潔易讀易讀。只需使用多個斷言。

另外,還要看看xUnit tests來看看他們是如何實現的東西。

+1

如果有的話,很多時候應該有多個測試,沒關係多個斷言。 –

0

此外,我最近開始使用XBehave它使用小黃瓜符號:鑑於...當...那麼...

,延續的xUnit,並允許斷言是否應非常有用,例如Name.ShouldEqual()。

非常可讀。

幾個斷言應與可讀性幫助,不要試圖在不提供一個清晰的增益細節優化。