Dot-Net

單元測試中的對像比較

  • September 15, 2021

我的單元測試中有兩個對象,實際對象和預期對象。對象方法的所有屬性都完全相同,如果我執行以下測試:

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

引用自:https://stackoverflow.com/questions/2207767