关于Assert.ReferenceEquals的误解(转)

在做单元测试的时候,想比较两个实例是否相同,用了Assert.ReferenceEquals,结果发现无论是否真的相同总是能通过。

通过“转到定义”发现调用的是System.Object.ReferenceEquals,这时还没想明白问题。于是使用:

Assert.IsFalse(object.ReferenceEquals(expected, actual));

这个可以正确执行。

于是又想是Assert做了什么吗?应该没有啊。网上继续搜,找到一篇文章:

http://stackoverflow.com/questions/766297/assert-referenceequals-passes-where-object-referenceequals-returns-false-i

终于恍然大悟,ReferenceEquals根本就不是断言方法,任何一个类都已经从Object继承了这个静态方法。

这是一个严重的理解错误啊,谨记。

链接:http://blog.bossma.cn/csharp/about_assert_referenceequals_misunderstanding/

posted @ 2013-10-16 13:47  邹邹  Views(172)  Comments(0)    收藏  举报