简体   繁体   English

NUnit Assert.AreEqual(对象a,对象b)假否定?

[英]NUnit Assert.AreEqual(object a, object b) false negative?

I can't understand why NUnit Assert.AreEqual is failing. 我不明白为什么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);

Using NHibernate (storing serialized data, then deserializing it). 使用NHibernate(存储序列化的数据,然后反序列化)。 I've inserted a breakpoint and inspected the objects in Local variables window -- they are identical. 我已经插入一个断点并检查了局部变量窗口中的对象,它们是相同的。

Here is the NUnit message: 这是NUnit消息:

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

Why would this test be failing when the objects appear to be identical? 当对象看起来相同时,为什么该测试会失败?

What is CircleData ? 什么是CircleData Does it override Equals ? 它是否覆盖Equals Looks to me like you're cloning it, which means that you've got two separate CircleData instances. 在我看来,您正在克隆它,这意味着您有两个单独的CircleData实例。 Unless CircleData overrides Equals , then it will be performing a reference equality check, which will fail. 除非CircleData重写Equals ,否则它将执行引用相等性检查,否则将失败。

It is not clear what is this dataService of yours doing behind the scenes but if it is serializing/deserializing you won't get same object references. 目前尚不清楚您的dataService在幕后做什么,但如果要序列化/反序列化,则不会得到相同的对象引用。 AreEqual compares object references in memory and not values. AreEqual比较内存中的对象引用而不是值。

Probably your Object doesn't implement Object.Equals correctly. 可能您的对象没有实现Object.Equals正确。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM