我正在使用 xUnit,如果是自定义类型,它没有办法确定 2IEnumerable<T>
是否相等。T
我已经尝试过使用LINQ SequenceEqual
,但是由于实例T
不同,这将返回 false;
这是一个非工作的基本测试IEqualityComparer
[Fact]
public void FactMethodName()
{
var one = new[] { new KeywordSchedule() { Id = 1 } };
var two = new[] { new KeywordSchedule() { Id = 1 } };
Assert.Equal(one, two, new KeywordScheduleComparer());
}
public class KeywordScheduleComparer : IEqualityComparer<IEnumerable<KeywordSchedule>>
{
public bool Equals(IEnumerable<KeywordSchedule> x, IEnumerable<KeywordSchedule> y)
{
return Object.ReferenceEquals(x, y) || (x != null && y != null && x.SequenceEqual(y));
}
public int GetHashCode(IEnumerable<KeywordSchedule> obj)
{
if (obj == null)
return 0;
return unchecked(obj.Select(e => e.GetHashCode()).Aggregate(0, (a, b) => a + b)); // BAD
}
}
我在集成测试中使用它,所以我在开始时将数据从 IEnumerable 插入到数据库中,然后调用我的 SUT 从数据库中检索数据并进行比较。
如果您能帮助我进行收藏比较,我将不胜感激!