Dot-Net
單元測試中的對像比較
我的單元測試中有兩個對象,實際對象和預期對象。對象方法的所有屬性都完全相同,如果我執行以下測試:
Assert.AreEqual( expectedObject.Property1, actualObject.Property1);結果按預期通過。但是,當我嘗試執行以下測試時,它失敗了:
Assert.AreEqual (expectedObject, actualObject);我錯過了什麼?不能比較兩個對象嗎?我必須檢查每個屬性嗎?
您需要覆蓋
Equals您的對象。Assert使用Object.Equals. 預設情況下,Object.Equals對引用類型的對象執行引用比較。也就是說,一個引用類型的兩個實例當且僅當它們引用同一個對象時才相等。您想要覆蓋它,以便執行值比較而不是執行參考比較。這是一篇關於該主題的非常好的MSDN 文章。請注意,您還需要覆蓋GetHashCode. 有關指南,請參閱 MSDN 。這是一個簡單的例子:前:
class Test { public int Value { get; set; } } Test first = new Test { Value = 17 }; Test second = new Test { Value = 17 }; Console.WriteLine(first.Equals(second)); // false後:
class Test { public int Value { get; set; } public override bool Equals(object obj) { Test other = obj as Test; if(other == null) { return false; } return this.Value == other.Value; } public override int GetHashCode() { return this.Value.GetHashCode(); } } Test first = new Test { Value = 17 }; Test second = new Test { Value = 17 }; Console.WriteLine(first.Equals(second)); // true