简体   繁体   English

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

[英]Assert.ReferenceEquals() Passes where Object.ReferenceEquals() returns 'false' in Visual Studio Test

In attempting to create an initial, failing unit test in Visual Studio Professonal 2008's test capabilities, I can't seem to get Assert.ReferenceEquals() to correctly fail when an object instance is not equal to a null reference. 在尝试在Visual Studio Professonal 2008的测试功能中创建初始的,失败的单元测试时,当对象实例等于空引用时,我似乎无法使Assert.ReferenceEquals()正确失败。 Note that object.ReferenceEquals() is correctly returning false for this same comparison. 请注意,对于此相同的比较, object.ReferenceEquals()正确返回false

Here is my class code: 这是我的班级代码:

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

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

And then here are the key aspects of my test class: 然后这是我的测试类的关键方面:

[TestClass()]
public class ProjectTest
{
    [TestMethod()]
    public void StartupTest()
    {
        object obj = "hello";
        Project.Startup(obj);    
        Assert.ReferenceEquals(obj, Project.TheObject); // Test Passes!?!
    }
}

Note that the static void Startup(object) method is empty, so the static object TheObject property is never set and remains null . 请注意, static void Startup(object)方法为空,因此永远不会设置static object TheObject属性并保持为null So, clearly, Assert.ReferenceEquals(obj, Project.TheObject) should fail, but somehow this test passes. 所以,显然, Assert.ReferenceEquals(obj, Project.TheObject)应该会失败,但不知何故,这个测试通过了。

Note that changing 注意改变

Assert.ReferenceEquals(obj, Project.TheObject)

to

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

causes this test to correctly fail. 导致此测试正确失败。

This seems too simple, and yet I cannot see what's going wrong here. 这看起来太简单了,但我看不出这里出了什么问题。 If someone can point out the error in my ways, I would be much obliged. 如果有人可以用我的方式指出错误,我会非常感激。

Thanks in advance, 提前致谢,

Mike 麦克风

Update Answered by James Avery: 更新James Avery的回复:

Ah, an how silly I feel now. 啊,我现在感觉多么愚蠢。 I knew it had to be something like this. 知道它必须是这样的。 Wow. 哇。

Sure enough, 'GoToDefinition' takes me to 'Object.ReferenceEquals()'. 果然,'GoToDefinition'将我带到'Object.ReferenceEquals()'。 So typing "Assert.ReferenceEquals()" is really System.Object.ReferenceEquals(), which in my case was quietly returning 'false'. 因此输入“Assert.ReferenceEquals()”实际上是System.Object.ReferenceEquals(),在我的情况下,它正在悄悄地返回'false'。 This, of course, has nothing to do with actually failing an assertion, so the test passes . 当然,这与实际失败的断言无关,因此测试通过 Amazing. 惊人。

Thanks James. 谢谢詹姆斯。

The ReferenceEquals method you are calling is the static method available on all reference objects, it is not part of the testing framework. 您调用的ReferenceEquals方法是所有引用对象上可用的静态方法,它不是测试框架的一部分。 If you look it is returning a boolean value whereas a normal assertion would be void. 如果你看它返回一个布尔值,而正常的断言将是无效的。 This is definitely confusing, .AreSame() is the assertion you are looking for. 这绝对令人困惑,.AreSame()是你正在寻找的断言。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 object.ReferenceEquals或==运算符? - object.ReferenceEquals or == operator? Object.ReferenceEquals对于匹配的字符串返回true - Object.ReferenceEquals returns true for matching strings IEnumerable、Where 和 Object.ReferenceEquals 的问题 - Issue with IEnumerable, Where, and Object.ReferenceEquals Object.ReferenceEquals永远不会命中 - Object.ReferenceEquals never hit 'Object.ReferenceEquals'始终为false,因为它使用值类型进行调用 - 'Object.ReferenceEquals' is always false because it is called with a value type Object.ReferenceEquals为两个不同的对象输出true - Object.ReferenceEquals prints true for two different objects c#中Object.Equals(object,object)和Object.ReferenceEquals(object,object)之间的区别 - difference between Object.Equals(object,object) and Object.ReferenceEquals(object,object) in c# ReferenceEquals用字符串返回false - ReferenceEquals returning false with strings C#operator ==,StringBuilder.Equals,Object.Equals和Object.ReferenceEquals之间的差异 - C# Differences between operator ==, StringBuilder.Equals, Object.Equals and Object.ReferenceEquals 为什么我要在Equals覆盖中执行object.ReferenceEquals(null,this)? - Why would I ever want to do object.ReferenceEquals(null, this) in Equals override?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM