Как исключить свойство всех элементов в IEnumerable при использовании ShouldBeEquivalentTo?

В своих тестах NUnit/FluentAssertions я сравниваю сложный объект, возвращенный из моей системы, с эталонным, используя следующий код:

    response.ShouldBeEquivalentTo(reference, o => o.Excluding(x => x.OrderStatus)
                                               .Excluding(x => x.Id)
                                               .Excluding(x => x.Items[0].Name)
                                               .Excluding(x => x.Items[0].Article)
                                               .Excluding(x => x.ResponseStatus));

Однако это не совсем то, что я намеревался. Я хочу исключить Name и Article для каждого объекта в списке Items, а не только для 0-го. Как реализовать этот сценарий?

Я просмотрел документацию и не нашел решения. Я что-то упускаю?


person kojo    schedule 12.03.2013    source источник


Ответы (1)


Существует перегрузка Excluding(), предоставляющая ISubjectInfo, которую можно использовать для более сложных критериев выбора. С этой перегрузкой вы можете делать такие вещи, как:

subject.ShouldBeEquivalentTo(expected, config =>
                config.Excluding(ctx => ctx.PropertyPath == "Level.Level.Text"));
person Dennis Doomen    schedule 12.03.2013
comment
Как именно я должен использовать PropertyPath в моем примере? Я пробовал PropertyPath == Items.Name и Order.Items.Name, но это не работает. - person kojo; 14.03.2013
comment
Как насчет ctx.PropertyPath.EndsWith(].Name) || ctx.PropertyPath.EndsWith(].Article)? - person Dennis Doomen; 15.03.2013
comment
Это работает, спасибо. Думаю, мне следует использовать регулярное выражение, если я хочу также сопоставить имя коллекции. Есть ли где-нибудь документация о том, как именно будет выглядеть PropertyPath в различных обстоятельствах? - person kojo; 15.03.2013
comment
Это выглядит именно так, как вы ожидаете. Например. Предметы[0].Имя. Вы также можете просмотреть EquivalencySpecs в исходном коде на CodePlex. Мы практикуем TDD, поэтому, надеюсь, вы сможете использовать их как своего рода документацию по API. - person Dennis Doomen; 15.03.2013