MSTest: CollectionAssert.AreEquivalent failed. The expected collection contains 1 occurrence(s) of

前端 未结 5 600
生来不讨喜
生来不讨喜 2020-12-08 20:23

Question:

Can anyone tell me why my unit test is failing with this error message?

CollectionAssert.AreEquivalent failed. The

5条回答
  •  死守一世寂寞
    2020-12-08 20:52

    It works if I add an IEqualityComparer as described on MSDN and if I use Enumerable.SequenceEqual. Note however, that now the order of the elements is relevant.

    In the unit test

    //CollectionAssert.AreEquivalent(list1, list2); // Does not work
    Assert.IsTrue(list1.SequenceEqual(list2, new MyPersonEqualityComparer())); // Works
    

    IEqualityComparer

    public class MyPersonEqualityComparer : IEqualityComparer
    {
        public bool Equals(MyPerson x, MyPerson y)
        {
            if (object.ReferenceEquals(x, y)) return true;
    
            if (object.ReferenceEquals(x, null) || object.ReferenceEquals(y, null)) return false;
    
            return x.Name == y.Name && x.Age == y.Age;
        }
    
        public int GetHashCode(MyPerson obj)
        {
            if (object.ReferenceEquals(obj, null)) return 0;
    
            int hashCodeName = obj.Name == null ? 0 : obj.Name.GetHashCode();
            int hasCodeAge = obj.Age.GetHashCode();
    
            return hashCodeName ^ hasCodeAge;
        }
    }
    

提交回复
热议问题