首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Assert.ReferenceEquals()通过Visual中Object.ReferenceEquals()返回'false‘的地方

Assert.ReferenceEquals()通过Visual中Object.ReferenceEquals()返回'false‘的地方
EN

Stack Overflow用户
提问于 2009-04-19 22:51:44
回答 1查看 5.2K关注 0票数 23

在Visual 2008的测试功能中创建初始的、失败的单元测试时,当对象实例不等于空引用时,我似乎无法让Assert.ReferenceEquals()正确地失败。注意,object.ReferenceEquals()正确地返回了相同比较的false

这是我的类代码:

代码语言:javascript
复制
public static class Project
{
    public static object TheObject { get; set; }

    public static void Startup(object theObject)
    {
        // ToDo: Project.Startup(): Test.
        // ToDo: Project.Startup(): Implement.
    }
}

下面是我的测试类的关键方面:

代码语言:javascript
复制
[TestClass()]
public class ProjectTest
{
    [TestMethod()]
    public void StartupTest()
    {
        object obj = "hello";
        Project.Startup(obj);    
        Assert.ReferenceEquals(obj, Project.TheObject); // Test Passes!?!
    }
}

注意,static void Startup(object)方法是空的,因此static object TheObject属性永远不会设置,并且保持为null。因此,很明显,Assert.ReferenceEquals(obj, Project.TheObject)应该失败了,但是这个测试以某种方式通过了。

请注意,改变

Assert.ReferenceEquals(obj, Project.TheObject)

Assert.IsTrue(object.ReferenceEquals(obj, Project.TheObject))

导致此测试正确失败。

这似乎太简单了,但我看不出这里出了什么问题。如果有人能指出我的错误,我将不胜感激。

提前谢谢你,

麦克

更新由James回答:

啊,我现在有多傻啊。我就知道一定是这样的。哇。

果然,'GoToDefinition‘带我去了'Object.ReferenceEquals()’。所以输入"Assert.ReferenceEquals()“实际上是System.Object.ReferenceEquals(),在我的例子中,这是在悄悄地返回'false‘。当然,这与实际失败的断言无关,所以测试通过了。太棒了。

谢谢詹姆斯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-04-19 23:54:26

您正在调用的ReferenceEquals方法是所有引用对象上可用的静态方法,它不是测试框架的一部分。如果您看,它是返回一个布尔值,而一个正常的断言将无效。这是绝对令人困惑的,.AreSame()是您要寻找的断言。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/766297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档