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