2013-09-08 2 views
1

Библиотека .NET FluentAssertions (версия 2.1.0) имеет несколько реализаций BeDecoratedWith<T>() для утверждения того, что тип (или член типа) имеет данный атрибут, применяемый к нему. Эти вызовы выглядят следующим образом:Fluent Assertions PropertyInfo BeDecoratedWith

выражения
typeof(X).Should() 
    .BeDecoratedWith<SomeAttribute>(attr => attr.Name == expectedValue); 

Лямбда утверждает, что атрибут имеет Name равную некоторые expectedValue.

Это замечательно, когда sut является типом, но когда он является членом, нет перегрузки BeDecoratedWith<T>, которая принимает выражение лямбда.

// compiler error: Cannot convert lambda expression to type 'string' because it is not a delegate type 
typeof(X).GetProperty("xyz").Should() 
    .BeDecoratedWith<SomeAttribute>(attr => attr.Name == expectedValue); 

документация быстро охватывает extensibility, но у меня возникают проблемы разработки, как я бы создать перегрузку (или метод пролонгации) BeDecoratedWith<T> на PropertyInfoAssertions класса, который принимает лямбда, как один из приведенных выше.

Может ли кто-нибудь показать мне правильный способ распространения Свободных утверждений для достижения этого?

+0

Итак, с чем вы столкнулись, в частности? – BartoszKP

+0

Лучший способ расширить библиотеку. Было бы видно, что я мог бы расширять 'ProprtyInfoAssertions', но тогда мне пришлось бы переписать весь код обработки атрибутов сам, что кажется неправильным. – nikmd23

+0

Хорошо, теперь я понимаю проблему. – BartoszKP

ответ

1

У вас есть два варианта:

  1. Создайте метод расширения в PropertyInfoAssertions, который поддерживает выражение лямбда и использует свойство SubjectProperties для доступа к фактическому свойству.
  2. Вставьте репозиторий на GitHub и добавьте его непосредственно в каркас. Я буду принимать запросы на получение.
+0

Хорошо, похоже, мне нужно будет развить код, чтобы сделать это «правильно». Спасибо за указатель. – nikmd23

+0

Нет, вам не обязательно. Вы все еще можете использовать опцию 1. Вам нужен только вариант 2, если вы хотите, чтобы я включил его в 2.2. –

0

Один из возможных ответов подождать некоторое время, а затем получить самую последнюю версию, так как этот вопрос, кажется, были зафиксированы недавно :)

http://fluentassertions.codeplex.com/workitem/12455

+0

Это не проблема в моей проблеме. Я использую этот код, но хочу, чтобы он делал больше. – nikmd23

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

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