【发布时间】:2013-07-25 15:16:21
【问题描述】:
我在使用 NUnit 时遇到了麻烦。我有一个从 List 继承并覆盖 Equals() 的类(因此,当两个实例以不同的顺序包含相同的元素时,它们可以被视为相等)。使用 Assert.AreEqual 时会失败,但使用 Assert.True 并手动调用 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 未被用户代码处理 H结果=-2146233088 Message= 预期和实际都包含 2 个元素 索引 [0] 处的值不同 预期的: 但是是:
来源=nunit.framework 堆栈跟踪: 在 NUnit.Framework.Assert.That(实际对象,IResolveConstraint 表达式,字符串消息,对象 [] args) 在 NUnit.Framework.Assert.AreEqual(预期对象,实际对象) 在 C:\dev_code\DiceLib\DiceLibTest\DieSetTest.cs:line 47 中的 DiceLibTest.DieSetTest.Equals() 内部异常:
我在 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 在内部通常对 List 和/或数组和/或集合有一些特殊行为,并且我的类属于这些类别之一。我的另一个猜测是我做错了什么,我没有看到明显的..
【问题讨论】: