我正在为面试进行测试,需要编写一些类,然后使用Assert
语句进行测试。在一个部分中,立即用Assert.AreEqual()
测试两个对象,然后用Assert.AreNotSame
对相同的两个对象进行测试。我的理解是,第一个测试检查两个对象具有相同的值(在我的示例中为a和b),第二个测试检查它们指向内存中的两个不同的对象。但是,在我的示例和程序中,第一个Assert
均失败。我是否缺少关于这两个Assert
测试应该如何工作的信息?他们俩怎么都可以通过?
public class Foo
{
public int a { get; set; }
public int b { get; set; }
public Foo(int a, int b) { this.a = a; this.b = b; }
}
Foo a = new Foo();
a.a = 1;
a.b = 2;
Foo b = new Foo(1, 2);
Assert.AreEqual(a,b);//this fails
Assert.AreNotSame(a,b);
答案 0 :(得分:0)
两个对象都不相同,因为它们是对象的两个不同实例。
如果在对象上重写Equals方法,则可以通过检查两个对象的属性是否相等来实现该方法。如果它们比对象还相等。所以您的新班级应该像这样...
public class Foo
{
public int a { get; set; }
public int b { get; set; }
public Foo(int a, int b) { this.a = a; this.b = b; }
public override bool Equals(object obj)
{
return ((Foo)obj).a == this.a && ((Foo)obj).b == this.b;
}
}
也请检查this答案以便进一步澄清...