在Visual 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回答:
啊,我现在有多傻啊。我就知道一定是这样的。哇。
果然,'GoToDefinition‘带我去了'Object.ReferenceEquals()’。所以输入"Assert.ReferenceEquals()“实际上是System.Object.ReferenceEquals(),在我的例子中,这是在悄悄地返回'false‘。当然,这与实际失败的断言无关,所以测试通过了。太棒了。
谢谢詹姆斯。
发布于 2009-04-19 23:54:26
您正在调用的ReferenceEquals方法是所有引用对象上可用的静态方法,它不是测试框架的一部分。如果您看,它是返回一个布尔值,而一个正常的断言将无效。这是绝对令人困惑的,.AreSame()是您要寻找的断言。
https://stackoverflow.com/questions/766297
复制相似问题