在nUnit中,相当于Hamcrest的Matchers.containsInAnyOrder(Matcher...匹配器)?



我想断言偶像包含满足约束集合的项目。对于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()));

相关内容

最新更新