Сбой Nunit Assert.AreEqual () при сравнении двух пользовательских объектов - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над тестом для собеседования, и мне нужно написать несколько классов, которые затем проверяются с 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 голосов
/ 13 ноября 2018

Оба объекта не равны и не одинаковы, поскольку это два разных экземпляра объекта.

Если вы переопределяете метод 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;
    }
}

Также проверьте этот ТАК ответ для дальнейшего разъяснения ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...