Библиотека .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
класса, который принимает лямбда, как один из приведенных выше.
Может ли кто-нибудь показать мне правильный способ распространения Свободных утверждений для достижения этого?
Итак, с чем вы столкнулись, в частности? – BartoszKP
Лучший способ расширить библиотеку. Было бы видно, что я мог бы расширять 'ProprtyInfoAssertions', но тогда мне пришлось бы переписать весь код обработки атрибутов сам, что кажется неправильным. – nikmd23
Хорошо, теперь я понимаю проблему. – BartoszKP