Проверить, есть ли у класса атрибут?
Я пытаюсь сделать небольшую тестовую разработку, и я пытаюсь проверить, что мои классы отмечены атрибутом:
[SubControllerActionToViewDataAttribute]
public class ScheduleController : Controller
Как я могу проверить модуль, что класс имеет этот атрибут, назначенный ему?
4 ответа:
проверяем, что
Attribute.GetCustomAttribute(typeof(ScheduleController), typeof(SubControllerActionToViewDataAttribute))
не null (
Assert.IsNotNull
или аналогичные)(причина, по которой я использую это, а не
IsDefined
это то, что в большинстве случаев я хочу проверить некоторые свойства атрибута тоже....)
то же самое, что вы обычно проверяете для атрибута в классе.
вот пример кода.
typeof(ScheduleController) .IsDefined(typeof(SubControllerActionToViewDataAttribute), false);
Я думаю, что во многих случаях проверка на наличие атрибута в тесте неправильно. Поскольку я не использовал функциональность субконтроллера MVC contrib, я не могу прокомментировать, подходит ли это в этом случае.
также можно использовать дженерики на этот:
var type = typeof(SomeType); var attribute = type.GetCustomAttribute<SomeAttribute>();
таким образом, вам не нужен еще один
typeof(...)
, что может сделать код чище.
Я знаю, что эта нить действительно старая, но если кто-то наткнется на нее, вы можете найти fluentassertions проект очень удобен для выполнения такого рода утверждений.
typeof(MyPresentationModel).Should().BeDecoratedWith<SomeAttribute>();