比较两个自定义对象时,Nunit Assert.AreEqual()失败

时间:2018-11-13 07:25:06

标签: c# nunit

我正在为面试进行测试,需要编写一些类,然后使用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);

1 个答案:

答案 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答案以便进一步澄清...