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

这是我的类(class)代码:

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”。当然,这与实际未通过断言无关,因此测试通过了。惊人的。

谢谢詹姆斯。

最佳答案

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

关于c# - Assert.ReferenceEquals()传递Visual Studio测试中Object.ReferenceEquals()返回 'false'的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/766297/

10-11 18:53