我正在使用xUnit,但它没有一种方法来确定两个IEnumerable<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从数据库中检索数据并进行比较。
如果您能帮助我使集合比较工作起来,我将不胜感激!