如何使用 xunit test 比较两个列表

2023-11-29

我目前正在尝试使用 xUnit 比较两个列表,其中包含相同的项目,但在运行时出现错误。

Assert.Equal(expectedList, actualList);

Error:

"Assert.Equal() Failure"
Expected: List<myObject> [myObject { modifier = '+', name = "name", type = "string" }, myObject { modifier = '+', name = "age", type = "int" }]
Actual:   List<myObject> [myObject { modifier = '+', name = "name", type = "string" }, myObject { modifier = '+', name = "age", type = "int" }]


这与对象平等有关。

MyObject不执行Equals method。默认情况下,您会获得引用相等性。我假设你有两个不同的对象MyObject.

这意味着您的列表包含相似的对象(意味着具有相同的值)并不重要,它们并不相同参考,所以你的测试检查了这一点,这就是为什么它fails.

internal class MyObject
{
    {
        public char Modifier { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }

    }
}


            [Fact]
            public void ListMyObject()
            {
                var list1 = new List<MyObject>
                {
                    new MyObject{ }
                };
                var list2 = new List<MyObject>
                {
                    new MyObject{ }
                };

                Assert.Equal(list1, list2); // Fails
            }

当我们将我们的类更新为这个时。

internal class MyObject
    {
        public char Modifier { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
        //When i add this to my class.
        public override bool Equals(object obj)
        {
            return this.Name == ((MyObject)obj).Name;
        }
    }

正如乔纳森·蔡斯(Jonathon Chase)的评论中提到的。

这是个好主意override the GetHashCode()方法也是如此。最好继承自IEquatable<T>这样你就可以避免铸造。

一切都变绿了。

        [Fact]
        public void ListMyObject()
        {
            var list1 = new List<MyObject>
            {
                new MyObject{ Name = "H" }
            };
            var list2 = new List<MyObject>
            {
                new MyObject{ Name = "H" }
            };

            Assert.Equal(list1, list2); //Passes
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 xunit test 比较两个列表 的相关文章

随机推荐