【问题标题】:In nUnit, what is the equivalent to Hamcrest's Matchers.containsInAnyOrder(Matcher... matchers)?在 nUnit 中,什么等价于 Hamcrest 的 Matchers.containsInAnyOrder(Matcher... matchers)?
【发布时间】:2017-02-20 19:56:15
【问题描述】:

我想断言 ICollection 包含将满足约束集合的项目。对于 Java Hamcrest,我会使用 Matchers.containsInAnyOrder(Matcher... matchers)。也就是说,对于给定的集合,集合中的每一项都将匹配匹配器中的一个匹配器。

我正在努力寻找 nUnit 3 中的等价物。是否存在?

【问题讨论】:

    标签: java c# nunit hamcrest


    【解决方案1】:

    你想要的是 CollectionEquivalentConstraint,

    CollectionEquivalentConstraint 测试两个 IEnumerable 是否等价——它们是否包含相同的项目,顺序不限。如果传递的实际值没有实现 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 的文档

    【讨论】:

    • 这几乎是我想要的。但这不完全一样。使用 CollectionEquivalentConstraints,我给它一个对象集合来比较。然后,它检查每个对象的预期中是否存在一项等于实际中的一项。我想改用 IConstraint 对象的集合。因此,对于实际中的每个对象,它对预期匹配器中的一个项目断言为真。举个例子,假设我有数组 int[] { 1, 2 },我想断言这是一个包含两个对象的数组,其中一个奇数和一个偶数。
    【解决方案2】:

    好的。我对此做了一个巧妙的回答。关键是创建一个 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()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      相关资源
      最近更新 更多