【发布时间】:2011-12-07 12:53:47
【问题描述】:
我曾经像这样比较列表,但在测试中返回 false:
Assert.IsTrue(expected.SequenceEquals(actual));
并尝试转换为 json 并且成功了:
Assert.AreEqual(expected.ToJson(), actual.ToJson());
值似乎相等,有什么不同?如何找出列表中的不同之处?
更新:
我的班级:
public class Department
{
[BsonId]
public ObjectId Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Id.ToString();
}
}
【问题讨论】:
-
您需要检查序列是否只包含相同的元素,或者也包含相同的顺序?
-
我只需要比较值。但有趣的是:为什么当对象的值相等时,列表中的顺序相等,SequenceEquals 返回 false。
-
@1gn1ter:
Enumerable.SequenceEqual()使用EqualityComparer<T>.Default比较项目,这可能是原因。 -
原因是您的比较器正在比较对您的对象的引用,而不是值。您需要覆盖 Equals (etc) 以获得所需的功能。或者,您可以逐个字段进行比较。
标签: c# .net unit-testing mstest mongodb-.net-driver