Nunit Assertion为集合之间的空交集

时间:2010-12-21 16:37:12

标签: vb.net unit-testing nunit

我四处看看,并不能完全理解这一点,我的大量尝试和错误尝试都没用。

我有一个用户名列表(我们称之为“原始列表”),一个对象正在返回 我有一个用户名列表(我们称之为'过滤列表')另一个对象正在返回

我正在测试一个方法,该方法返回原始列表中不在过滤列表中的所有项目。

理想情况下我想要的是

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

到目前为止,我唯一能做的就是迭代过滤列表并执行

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

1 个答案:

答案 0 :(得分:2)

使用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));