Сравните два списка которые в модуле test - PullRequest
0 голосов
/ 29 ноября 2018

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

Объекты внутри списков одинаковы по своим значениям.

Но когда я проверяю эти списки, модульный тест возвращает CollectionAssert.AreEqual не удалось.(Элемент с индексом 0 не совпадает).

Я думаю, что метод CollectionAssert.AreEqual не проверяет список для их значений, он проверяет ссылку.

Мой вопрос: как я могу сравнить два списка в модульном тесте по их значению?

public class User 
{
    public string Name { get; set; }
    public string Password { get; set; }
}

    [TestMethod]
    public void CheckUserList()
    {
        List<User> users = new List<User>()
        {
            new User(){ Name="Name",Password="Pass"},
            new User(){ Name="Name1",Password="Pass1"},
            new User(){ Name="Name2",Password="Pass2"},
        };

        List<User> users1 = new List<User>()
        {
            new User(){ Name="Name",Password="Pass"},
            new User(){ Name="Name1",Password="Pass1"},
            new User(){ Name="Name2",Password="Pass2"},
        };

        CollectionAssert.AreEqual(users, users1);
    }

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Достаточно методов Equal и GetHashCode.Тогда CollectionAssert.AreEqual будет работать так, как вы ожидали

public class User 
{
    public string Name { get; set; }
    public string Password { get; set; }

    public override bool Equals(object obj)
    {
        var user = obj as User;
        return user != null &&
               Name == user.Name &&
               Password == user.Password;
    }

    public override int GetHashCode()
    {
        var hashCode = 1290039854;
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Password);
        return hashCode;
    }
}
0 голосов
/ 29 ноября 2018

Я думаю, вам нужно переопределить оператор == или метод Equals() для вашего User класса.

public class User
{
    public string Name { get; set; }
    public string Password { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is User another)
        {
            return Name == another.Name && Password == another.Password;
        }

        return base.Equals(obj);
    }

    public static bool operator ==(User left, User right)
    {
        return left.Equals(right);
    }

    public static bool operator !=(User left, User right)
    {
        return !left.Equals(right);
    }

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