NUnit Assert.AreEqual(对象a,对象b)假阴性?

时间:2010-07-28 21:08:24

标签: c# nhibernate nunit

我无法理解为什么NUnit Assert.AreEqual失败。

var dataService = new DataService(db);
dataService.Set("Tests", "circle1", circle);
var circleData = dataService.Get("Tests", "circle1");
Assert.IsNotNull(circleData);
var circleCopy = circleData.Get();
Assert.AreEqual(circle, circleCopy);

使用NHibernate(存储序列化数据,然后反序列化)。我插入了一个断点并检查了局部变量窗口中的对象 - 它们是相同的。

这是NUnit消息:

Assert.AreEqual failed. Expected:<TestData.TestClassCircle>. Actual:<TestData.TestClassCircle>.

为什么当对象看起来相同时,此测试会失败?

3 个答案:

答案 0 :(得分:15)

什么是CircleData?它会覆盖Equals吗?在我看来你正在克隆它,这意味着你有两个独立的CircleData实例。除非CircleData覆盖Equals,否则它将执行引用相等性检查,这将失败。

答案 1 :(得分:0)

目前尚不清楚你的dataService在幕后做了什么,但如果它是序列化/反序列化,你就不会获得相同的对象引用。 AreEqual比较内存中的对象引用而不是值。

答案 2 :(得分:0)

可能你的Object没有正确实现Object.Equals。

http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx