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