我想断言ICollection包含满足约束集合的项目。对于Java Hamcrest,我会使用Matchers.containsInAnyOrder(Matcher ... matchers)。对于给定的集合,集合中的每个项目都匹配匹配器中的一个匹配器。
我很难在nUnit 3中找到一个等价物。是否存在?
答案 0 :(得分:2)
你想要的是CollectionEquivalentConstraint,
CollectionEquivalentConstraint测试两个IEnumerables是等价的 - 它们以任何顺序包含相同的项目。如果传递的实际值没有实现IEnumerable,则抛出异常。
int[] iarray = new int[] { 1, 2, 3 };
string[] sarray = new string[] { "a", "b", "c" };
Assert.That( new string[] { "c", "a", "b" }, Is.EquivalentTo( sarray ) );
Assert.That( new int[] { 1, 2, 2 }, Is.Not.EquivalentTo( iarray ) );
如果您需要更多详细信息,请查看https://github.com/nunit/docs/wiki/CollectionEquivalentConstraint
上的文档答案 1 :(得分:0)
好的。我对此实施了一个灵活的答案。关键是创建一个IComparer,它将比较约束和对象。它看起来像这样:
/// <summary>
/// A Comparer that's appropriate to use when wanting to match objects with expected constraints.
/// </summary>
/// <seealso cref="System.Collections.IComparer" />
public class ConstraintComparator : IComparer
{
public int Compare(object x, object y)
{
var constraint = x as IConstraint;
var matchResult = constraint.ApplyTo(y);
return matchResult.IsSuccess ? 0 : -1;
}
}
然后我可以执行以下操作:
Assert.That(actual, Is.EquivalentTo(constraints).Using(new ConstraintComparator()));