c# - Assert.ReferenceEquals() 在 Visual Studio 测试中通过 Object.ReferenceEquals() 返回 'false'

标签 c# visual-studio unit-testing equals assertions

试图在 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/

相关文章:

c# - 相当于 C# 排序列表的 Java

c# - 从 Jquery 中的 JSON 调用返回 List<string> 的长度未定义

c# - 将 2D 仿射变换矩阵转换为 3D 仿射变换矩阵

C# - 将大型 (150MB) 文本文件读入富文本框

c - Visual Studio 2017 Linux 项目中无法识别 Linux 头文件

c# - 为什么覆盖 Parallel.foreach 循环的 .NET 单元测试依赖于硬件?

c# - 为什么字符串相等比较字符?

visual-studio - 缺少 NuGet 包,但 "Packages Already Installed"

python - 如何在 Python 中创建自定义 UnitTest 报告?

swift - 如何检查单元测试中是否释放了无主引用?