代码之家  ›  专栏  ›  技术社区  ›  Mike Rosenblum

assert.referenceequals()在Visual Studio测试中传递object.referenceequals()返回“false”的位置

  •  22
  • Mike Rosenblum  · 技术社区  · 15 年前

    在试图在Visual Studio Professional 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 回复  |  直到 15 年前
        1
  •  32
  •   James Avery    15 年前

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