Проверить, есть ли у класса атрибут?


Я пытаюсь сделать небольшую тестовую разработку, и я пытаюсь проверить, что мои классы отмечены атрибутом:

[SubControllerActionToViewDataAttribute]
public class ScheduleController : Controller

Как я могу проверить модуль, что класс имеет этот атрибут, назначенный ему?

4 83

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>();