我想断言ICollection包含满足一系列约束的项目。对于Java Hamcrest,我会使用Matchers.containsInAnyOrder(Matcher ... matchers)。对于给定的集合,集合中的每个项目都将匹配匹配器中的一个匹配器。在nUnit中,与Hamcrest的Matchers.containsInAnyOrder(Matcher ... matchers)等效的是什么?
我努力在nUnit 3中找到一个等价物。有一个存在吗?
我想断言ICollection包含满足一系列约束的项目。对于Java Hamcrest,我会使用Matchers.containsInAnyOrder(Matcher ... matchers)。对于给定的集合,集合中的每个项目都将匹配匹配器中的一个匹配器。在nUnit中,与Hamcrest的Matchers.containsInAnyOrder(Matcher ... matchers)等效的是什么?
我努力在nUnit 3中找到一个等价物。有一个存在吗?
好吧检查出的文档。我对此做了一个光滑的回答。关键是创建一个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()));
你想要什么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
,几乎我想要做什么。但这不完全相同。使用CollectionEquivalentConstraints,我给它一个对象集合以进行比较。然后它检查预期中是否存在一个等于每个对象实际中的一个项目的项目。我想使用一组IConstraint对象。因此,对于实际中的每个对象,它将在预期的匹配器中为一个项目声明为true。 举一个例子,假设我有数组int [] {1,2},并且我想断言这是一个具有一个奇数和一个偶数的两个对象的数组。 –