軟體工程師的小事:到底要不要 Close

複寫 Equals 與 GetHashCode 實作物件比較方法

在單元測試使用 Assert.Equal 比較兩個物件時無法通過驗證

範例程式碼可以在此取得

net-core-xunit-test-compare-generics-type

單元測試專案使用「xUnit 單元測試專案(.NET Core)」,類別庫專案使用「.NET Standard 2.0 類別庫專案」。

撰寫單元測試有些情境會要確認取得的物件集合是否符預期:取得有效的使用者清單、被鎖定的帳號清單 ... 等。

取得物件集合後,在 xUnit 會使用 Assert.Equal 方法來確認物件是否符合預期。

範例程式碼為模擬取得有價證劵清單的程式碼片段,在單元測試中判斷取得的有價證券清單是否符合預期。

assert stock list are equal

執行測試後發現比對結果並不相符,取得測試失敗的紅燈,但輸出內容其實是符合的。

assert test failure
複寫 Equals 與 GetHashCode

複寫值物件的 Equals 與 GetHashCode 方法,在進行物件比較時 Assert.Equal 可以正確的判斷兩個物件是否相同。

範例程式碼在 Stock 類別覆寫 Equals 與 GetHoshCode 進行 Id、ISIN、Code 與 Name 比較。

override equal method compare two instance
部分情境中並非所有屬性都要拿來做相等判斷,就可以在 Equals 方法中指定相等的內容。

複寫完成後重新執行單元測試:取得通過測試的綠燈!

override equal method compare two instance
參考資料

留言