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 から DB にデータを挿入し、SUT を呼び出して DB からデータを取得して比較します。
コレクションの比較を機能させるのを手伝っていただければ幸いです。