当前位置: 首页 > 知识库问答 >
问题:

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

公西国发
2023-03-14

我想断言ICollection包含满足约束集合的项。对于Java Hamcrest,我将使用匹配器。包含任何订单(匹配器…匹配器)。也就是说,对于给定的集合,集合的每个项都将匹配匹配器中的一个匹配器。

我正努力在nUnit 3中找到一个等价物。有人存在吗?

共有2个答案

段干宏硕
2023-03-14

好吧我实现了一个巧妙的答案。关键是创建一个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()));
范承志
2023-03-14

您想要的是集合等效约束,

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

 类似资料:
  • 问题内容: 什么是Java相当于ManualResetEvent? 问题答案: 我所知道的最接近的是信号量。只需将其“许可”计数为1即可使用,获得/释放将与您从中获得的信息几乎相同。 初始化为一个的信号灯可以用作互斥锁,该信号灯最多只能使用一个许可。这通常被称为二进制信号量,因为它只有两种状态:一个许可可用,或零许可可用。当以这种方式使用时,二进制信号量具有属性(与许多Lock实现不同),该“锁”

  • 它看起来像hamcrest(尽管看起来,还有更多)。为什么我会选择使用(除了看起来类稍微小一点之外),为什么这两个类如此相似?

  • 我正在寻找一个Hamcrest Matcher到返回java的单元测试方法。util。可选类型。比如: 是否有任何可用的实现抛出Maven存储库?

  • 问题内容: 我有一个Bash shell脚本,我想在其中暂停执行,直到用户按下某个键为止。在DOS中,可以使用“ pause”命令轻松完成此操作。我可以在脚本中使用等效的Linux吗? 问题答案: 做这个: 该指定它只是等待一个字符。在将其放入原始模式,这是必要的,否则,如果按类似反斜杠,它不会注册,直到你遇到下一个关键。在指定的提示,如果包含空格,必须用引号括起来。仅当您想知道他们按下了哪个键时

  • 给定项目的或,是否有任何(或匹配器组合)将断言每个项目都匹配单个? 例如,给定此项目类型: 我想写一个断言,即一个集合中的所有项目都有一个特定的性别值。我在想这样的事情: 有没有办法不用自己编写