【问题标题】:NUnit Assert.AreEqual(object a, object b) false negative?NUnit Assert.AreEqual(object a, object b) 假阴性?
【发布时间】:2010-07-28 21:08:24
【问题描述】:

我不明白为什么 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>.

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

【问题讨论】:

    标签: c# nhibernate nunit


    【解决方案1】:

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

    【讨论】:

    • 我自己被这个咬了大约 3 次。现在我总是记得:)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        • 2020-05-07
        • 1970-01-01
        • 2011-04-04
        相关资源
        最近更新 更多