我想断言偶像包含满足约束集合的项目。对于Java Hamcrest,我将使用Matchers.ContainSinanyOrder(Matcher ... Matchers)。那是针对给定的集合,该集合的每个项目都会与匹配器中的一个匹配项匹配。
我正在努力在Nunit 3中找到同等的3.是否存在?
您想要的是Collection EquivalentConstraint,
Collection EquivalEntConstraint测试两个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/collectionequalentconstraint
好的。我对此实现了一个光滑的答案。关键是创建一个将比较约束和对象的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()));