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

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

[SubControllerActionToViewDataAttribute]
public class ScheduleController : Controller

Как мне unit test присвоить этому классу класс?

Ответ 1

проверьте, что

Attribute.GetCustomAttribute(typeof(ScheduleController),
    typeof(SubControllerActionToViewDataAttribute))

не является нулевым (Assert.IsNotNull или аналогичным)

(причина, по которой я использую это, а не IsDefined, заключается в том, что в большинстве случаев я хочу также проверить некоторые свойства атрибута....)

Ответ 2

То же самое вы обычно проверяете для атрибута в классе.

Вот пример кода.

typeof(ScheduleController)
.IsDefined(typeof(SubControllerActionToViewDataAttribute), false);

Я думаю, что во многих случаях тестирование на наличие атрибута в unit test неверно. Поскольку я не использовал функции субконтроллера MVC contrib, я не могу прокомментировать, подходит ли это в этом случае.

Ответ 3

Также можно использовать дженерики:

var type = typeof(SomeType);
var attribute = type.GetCustomAttribute<SomeAttribute>();

Таким образом вам не нужен другой typeof(...), который может сделать код более чистым.

Ответ 4

Я знаю, что эта ветка действительно старая, но если кто-то наткнется на нее, вы можете найти fluentassertions проект, очень удобный для такого рода утверждений.

typeof(MyPresentationModel).Should().BeDecoratedWith<SomeAttribute>();