Dot-Net
單元測試 Assert.AreEqual 失敗
我對從集合中獲取對象的方法進行了單元測試。這一直失敗,我不明白為什麼,所以我在下面創建了一個非常簡單的測試來創建 2 個供應商對象並測試它們是否相等,看看我是否可以在我的程式碼測試中發現問題。但是這個測試又失敗了。任何人都可以看到或解釋原因嗎?
[TestMethod()] public void GetSupplierTest2() { Supplier expected = new Supplier(); expected.SupplierID = 32532; expected.SupplierName = "Test 1" Supplier actual = new Supplier(); actual.SupplierID = 32532; actual.SupplierName = "Test 1" Assert.AreEqual(expected, actual); }但是,如果我測試測試通過的對象的各個屬性…
[TestMethod()] public void GetSupplierTest2() { Supplier expected = new Supplier(); expected.SupplierID = 32532; expected.SupplierName = "Test 1" Supplier actual = new Supplier(); actual.SupplierID = 32532; actual.SupplierName = "Test 1" Assert.AreEqual(expected.SupplierID , actual.SupplierID ); Assert.AreEqual(expected.SupplierName , actual.SupplierName ); }
如果要比較 Supplier 的兩個不同實例,並希望在某些屬性具有相同值時將它們視為相等,則必須重寫
Equals方法Supplier並在方法中比較這些屬性。您可以在此處閱讀有關 Equals 方法的更多資訊:http: //msdn.microsoft.com/en-us/library/bsc2ak47.aspx
範例實現:
public override bool Equals(object obj) { if (obj is Supplier) { Supplier other = (Supplier) obj; return Equals(other.SupplierID, this.SupplierID) && Equals(other.SupplierName, this.SupplierName); } return false; }請注意,您還會收到一個編譯器警告,提示您還必須實現 GetHashCode,這可能很簡單:
public override int GetHashCode() { return SupplierID; }
正如所有其他答案所說,問題是您正在嘗試比較
Supplier$$ probably $$沒有覆蓋
Equals方法。但我認為您不應該Equals出於測試目的而覆蓋,因為它可能會影響生產程式碼,或者您可能需要Equals生產程式碼中的其他邏輯。 相反,您應該像在第一個範例中那樣逐個聲明每個成員(如果您沒有很多地方要比較整個對象),或者將此比較邏輯封裝在某個類中並使用此類:static class SupplierAllFieldsComparer { public static void AssertAreEqual(Supplier expected, Supplier actual) { Assert.AreEqual(expected.SupplierID , actual.SupplierID ); Assert.AreEqual(expected.SupplierName , actual.SupplierName ); } }// 測試程式碼:
SupplierAllFieldsComparer.AssertAreEqual(expected, actual);