Nunit Assertion для пустого пересечения между коллекциями - PullRequest
1 голос
/ 21 декабря 2010

Я огляделся по сторонам и не могу понять этого, и все мои попытки проб и ошибок были бесполезны.

У меня есть список имен пользователей (мы назовем «оригинальный список»), один объект возвращается У меня есть список имен пользователей (мы будем называть «список фильтрации»), другой объект возвращает

Я тестирую метод, который возвращает все элементы из исходного списка, которых нет в списке фильтрации.

В идеале я хочу что-то вроде

Assert.That(returnedList, Has.No.Members.In(filtrationList))

Пока что единственное, что я могу сделать, - это перебрать список фильтрации и сделать

Assert.That(returnedList, Has.None.EqualTo(filteredUser))

1 Ответ

2 голосов
/ 04 января 2011

С помощью nunit вы можете создать любое пользовательское ограничение. Если вы хотите проверить две коллекции на пересечение, вы можете создать что-то вроде этого:

public class Intersects : CollectionConstraint
{
    private IEnumerable _collection2;

    public Intersects(IEnumerable collection2)
        : base(collection2)
    {
        _collection2 = collection2;
    }

    public static Intersects With(IEnumerable arg)
    {
        return new Intersects(arg);
    }

    protected override bool doMatch(IEnumerable collection)
    {
        foreach (object value in collection)
        {
            foreach (object value2 in _collection2)
                if (value.Equals(value2))
                    return true;
        }

        return false;
    }

    public override void WriteDescriptionTo(MessageWriter writer)
    {
        //You can put here something more meaningful like items which should not be in verified collection.
        writer.Write("intersecting collections");
    }
}

Использование довольно просто:

string[] returnedList = new string[] { "Martin", "Kent", "Jack"};
List<string> filteredUsers = new List<string>();
filteredUsers.Add("Jack");
filteredUsers.Add("Bob");
Assert.That(returnedList, Intersects.With(filteredUsers));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...