首页 > 解决方案 > 比较单元测试中的两个列表

问题描述

我有两个列表,其中包含两个用户对象。

列表中的对象的值相同。

但是当我检查这个列表时,单元测试返回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);
}

标签: c#unit-testingcollections

解决方案


我认为您需要为您的课程覆盖==运算符或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);
    }

}

推荐阅读