我四处看看,并不能完全理解这一点,我的大量尝试和错误尝试都没用。
我有一个用户名列表(我们称之为“原始列表”),一个对象正在返回 我有一个用户名列表(我们称之为'过滤列表')另一个对象正在返回
我正在测试一个方法,该方法返回原始列表中不在过滤列表中的所有项目。
理想情况下我想要的是
Assert.That(returnedList, Has.No.Members.In(filtrationList))
到目前为止,我唯一能做的就是迭代过滤列表并执行
Assert.That(returnedList, Has.None.EqualTo(filteredUser))
答案 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));