繁体   English   中英

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

[英]Nunit Assert.AreEqual() fails when comparing two custom objects

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

这是两个不同的实例,因此两个对象既不相等也不相同。

如果在对象上重写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;
    }
}

还请检查 SO答案以进一步澄清...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM