2017-02-20 31 views
0

Я хотел бы утверждать, что ICollection содержит элементы, которые удовлетворяют коллекции ограничений. Для Java Hamcrest я бы использовал Matchers.containsInAnyOrder (Matcher ... matchers). То есть для данной коллекции каждый элемент коллекции будет соответствовать одному совпадению в матчи.В nUnit, что эквивалентно совпадениям Hamcrest.containsInAnyOrder (Matcher ... matchers)?

Я изо всех сил пытаюсь найти эквивалент в nUnit 3. Существует ли один?

ответ

0

Alright. Я применил для этого гладкий ответ. Ключом является создание 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())); 
2

То, что вы хотите это 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

+0

Это почти делает то, что я хочу. Но это не совсем то же самое. С CollectionEquivalentConstraints я даю ему коллекцию объектов для сравнения. Затем он проверяет, существует ли один объект в ожидаемом, который равен одному элементу в фактическом для каждого объекта. Вместо этого я хочу использовать коллекцию объектов IConstraint. Так что для каждого объекта в фактическом, он утверждает true для одного элемента в ожидаемых совпадениях. Чтобы привести пример, допустим, у меня есть массив int [] {1, 2}, и я хочу утверждать, что это массив из двух объектов, который имеет ровно один нечетный и один четный. –

 Смежные вопросы

  • Нет связанных вопросов^_^