Проверить, есть ли у класса атрибут?
Я пытаюсь сделать небольшую тестовую разработку, и я пытаюсь проверить, что мои классы отмечены атрибутом:
[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>();