簡體   English   中英

xUnit 斷言多個屬性

[英]xUnit assert multiple properties

在 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..]) 

如果有問題的類實現了一個適當的自定義Equals() ,或者它是一個結構(默認情況下Equals()進行逐字段比較)或匿名類型( Equals()進行逐個屬性的比較)屬性比較),那么您可以斷言它們在單個斷言中相等。

不過,這將是一個壞主意; 復制和相等操作中可能存在相關錯誤,這意味着兩者都失敗了,以至於一個似乎確認另一個已經工作。

如果不是多個測試,最好有多個斷言。

雖然在實際代碼中“檢查一堆不同的東西是否相等”的便利性可能很方便,但在測試中你不想要“檢查一堆不同的東西是否相等”; 你想要一個明確的“確認姓名相等”,然后是一個明確的“確認年齡相等”等等,不僅作為測試,而且作為已測試內容的明確指示,並暗示您希望工作的內容(有時,對於新加入項目的開發人員來說,單元測試比書面文檔更好,因為他們所說的應該如何工作)。

如果您發現您在許多測試中對多個屬性進行了相同的檢查,則將AssertAllPropertiesEqual()方法添加到測試本身中,但其中的多個斷言更加明顯和明顯。

不,不是不使用反射。 即使有反思,我也不推薦這種方法。 單元測試應該有利於可讀性而不是簡潔。 只需使用多個斷言。

另外,看看xUnit 測試,看看它們是如何實現的。

此外,我最近開始使用 XBehave,它使用 Gherkin 符號: Given... When... Then...

非常有用,因為它擴展了 XUnit 並允許應該斷言,例如 Name.ShouldEqual()。

很有可讀性。

幾個斷言應該有助於提高可讀性,不要試圖優化不能提供明顯收益的細節。

不,您必須按屬性進行測試(每個測試一個斷言),這是確定出現問題的方法。 例如,如果你有一個名為 When_CopyStuff_Is_Called_Then_It_Must_Sets_Right_Name() 的測試很清楚地理解錯誤而不是所有屬性

當您需要測試 Api 模型時,這非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM