MSTest: CollectionAssert.AreEquivalent не удалось. Ожидаемая коллекция содержит 1 вхождение

Еще один подход должен использовать членство ASP.NET для аутентификации, связать Ваш Пользовательский класс с участниками ASP.NET и использовать Ваш Пользовательский класс для большего количества детализированных полномочий. Мы делаем это, потому что это позволяет изменять поставщиков аутентификации очень легко, все еще сохраняя способность иметь сложную систему разрешения.

В целом, стоит помнить, что аутентификация/идентификационные данные и полномочия хранения являются не обязательно той же проблемой.

22
задан Community 23 May 2017 в 12:17
поделиться

2 ответа

Я написал это для тестирования коллекций, где порядок не важен:

    public static bool AreCollectionsEquivalent<T>(ICollection<T> collectionA, ICollection<T> collectionB, IEqualityComparer<T> comparer)
    {
        if (collectionA.Count != collectionB.Count)
            return false;

        foreach (var a in collectionA)
        {
            if (!collectionB.Any(b => comparer.Equals(a, b)))
                return false;
        }

        return true;
    }

Не так элегантно, как при использовании SequenceEquals, но это работает.

Конечно, чтобы использовать его, вы просто делаете:

Assert.IsTrue(AreCollectionsEquivalent<MyType>(collectionA, collectionB, comparer));

0
ответ дан 29 November 2019 в 04:19
поделиться

Это работает, если я добавлю IEqualityComparer<T>, как описано в MSDN , и если я использую Enumerable.SequenceEqual. Отметьте, однако, что теперь порядок элементов важен.

В модульном тесте

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

IEqualityComparer

public class MyPersonEqualityComparer : IEqualityComparer<MyPerson>
{
    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;
    }
}
21
ответ дан 29 November 2019 в 04:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: