当前位置:  开发笔记 > 编程语言 > 正文

Assert.ReferenceEquals()在Visual Studio Test中Object.ReferenceEquals()返回'false'的位置

如何解决《Assert.ReferenceEquals()在VisualStudioTest中Object.ReferenceEquals()返回'false'的位置》经验,为你挑选了1个好方法。

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

这是我的班级代码:

public static class Project
{
    public static object TheObject { get; set; }

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

然后这是我的测试类的关键方面:

[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 Avery的回复:

啊,我现在感觉多么愚蠢.我知道它必须是这样的.哇.

果然,'GoToDefinition'将我带到'Object.ReferenceEquals()'.因此输入"Assert.ReferenceEquals()"实际上是System.Object.ReferenceEquals(),在我的情况下,它正在悄悄地返回'false'.当然,这与实际失败的断言无关,因此测试通过.惊人.

谢谢詹姆斯.



1> James Avery..:

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

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有