我目前正在尝试将两个具有相同项目的列表与xUnit进行比较,但是在运行时出现错误。
Assert.Equal(expectedList, actualList);
错误:
"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" }]
答案 0 :(得分:4)
这与对象相等有关。
MyObject
未实现Equals method
。默认情况下,您获得引用相等性。我假设您为MyObject
有两个不同的对象。
这意味着您的列表拥有相似的对象(意味着具有相同的值)并不相同,它们并不具有相同的引用,因此您的测试会对此进行检查,这就是失败的原因。
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;
}
}
一切都变成绿色。
[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
}