我一直在NUnit遇到問題。我有一個從List繼承的類並覆蓋Equals()(因此,當兩個實例按照不同的順序包含相同的元素時,它們可以被視爲相等)。當使用Assert.AreEqual,它失敗了,但使用Assert.True和調用的Equals手工作品:Assert.AreEqual失敗的派生自List <>的類重寫Equals()
[Test]
public void Equals()
{
var dieSet1 = new DieSet {new Die(1), new Die(2)};
var dieSet2 = new DieSet {new Die(2), new Die(1)};
Assert.True(dieSet1.Equals(dieSet2)); //ok
Assert.AreEqual(dieSet1, dieSet2); //fails with an exception
}
下面是異常詳細信息:
NUnit.Framework.AssertionException是由用戶代碼未處理 的HResult = -2146233088 消息=預期與實際都與2個元素 值不同索引[0] 預期: 但是:
源= nunit.fram ework 堆棧跟蹤: 在NUnit.Framework.Assert.That(對象實際,IResolveConstraint表達,字符串信息,對象[]參數) 在NUnit.Framework.Assert.AreEqual(預期的對象,對象的實際) 在DiceLibTest.DieSetTest。等於()在C:\ dev_code \ DiceLib \ DiceLibTest \ DieSetTest.cs:行47 的InnerException:
我的equals()設置一個斷點,並確保當Assert.AreEqual是它不叫調用。
我的班級是這樣的:
public class DieSet : List<Die>, IRollable
{
}
我讀過一些相關的問題,例如: NUnit doesn't work well with Assert.AreEqual
但我仔細檢查了我的equals()方法的簽名正確。
public override bool Equals(object obj)
{
}
我的猜測是NUnit的內部對列表<一些特殊行爲>和/或一般的陣列和/或集合,而我的課落入這些類別之一。我的另一個猜測是,我做錯了什麼,我沒有看到明顯的..
哎喲,這是在手冊中,我一定錯過了... 感謝有關實施ISet和使用組合的建議。 – misterfrb