我一直在使用 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 HResult=-2146233088 消息= 预期和实际都具有 2 个元素 索引 [0] 处的值不同预期:但是是:
Source=nunit.framework StackTrace:在 DiceLibTest.DieSetTest 的 NUnit.Framework.Assert.AreEqual(预期对象,实际对象)的 NUnit.Framework.Assert.That(实际对象,IResolveConstraint 表达式,字符串消息,对象 [] args)。 c:\dev_code\DiceLib\DiceLibTest\DieSetTest.cs:line 47 InnerException 中的 Equals():
我在 Equals() 中设置了一个断点,并确保在调用 Assert.AreEqual 时没有调用它。
我的课是这样的:
public class DieSet : List<Die>, IRollable
{
}
我读过一些相关的问题,例如: NUnit does not work well with Assert.AreEqual
但是我仔细检查了,我的 Equals() 方法具有正确的签名。
public override bool Equals(object obj)
{
}
我的猜测是,NUnit 在内部通常对 List<> 和/或数组和/或集合有一些特殊行为,并且我的类属于这些类别之一。我的另一个猜测是我做错了什么,我没有看到明显的..