2011-06-28 127 views
0

我一直在尋找一種方法來檢查兩個對象,但我找到了Equals,Assert,AreEqual和其他一些對象,我不知道應該使用哪一個。此外,我一直在用新的Nunit語法進行測試,並且很難找到用於比較兩個對象的新語法。下面是我的測試,我的代碼:Nunit 2.5.10 - 無法比較兩個對象

[Test] 
public void CheckForDriversSelectedMoreThanOnce_ReturnsDriversSelectedMoreThanOnceAndTheirSelectedPositions() 
{ 
    //arrange 
    Prediction prediction = new Prediction(); 

    Driver expected = new Driver { position = 1, name = "Michael Schumacher" }; 

    //act 
    var actual = prediction.CheckForDriversSelectedMoreThanOnce(); 

    //assert 
    //Assert.That(actual, Is.EqualTo(expected)); 
    //Assert.That(Is.Equals(actual, expected); 
    Assert.AreEqual(expected, actual); 
} 

public Driver CheckForDriversSelectedMoreThanOnce() 
{ 
    Driver driver = new Driver { position = 1, name = "Michael Schumacher" }; 
    return driver; 
} 

Assert.That(actual, Is.EqualTo(expected));Assert.AreEqual(expected, actual);給我 預期: 不過是:

的其他線路Assert.That(Is.Equals(actual, expected);給我: 預計:真 不過是:假

回答

1

你可能需要在你的Class中實現IEquatable,類似於;

public bool Equals(Type other) 
     { 
      return Name == other.Name && Position == other.Position; 
     } 

我試圖比較使用'Contains'和上面解析的linq語句中的2個對象時發生此問題。

實例 的默認實現Equals()取決於您的對象類型。 引用類型繼承 System.Object的默認 實現,這是一個簡單的 對象標識(ReferenceEquals()) 檢查。默認情況下,參考類型 將在實例Equals() 上返回true,當且僅當它們是相同的 對象實例。

我假設Assert.AreEqual(obj1,obj2)在某些點確實obj1.Equals(obj2),在這種情況下,它們將不匹配。

另一種選擇是斷言實際屬性,而不是對象

Assert.AreEqual("Michael Schumacher", actual.Name); 
+0

我過快有匹配,沒有看到您的編輯呢。 – DerMeister

+0

是的,並定義決定'匹配'的自定義邏輯 – ChrisBint