J'essaie de faire un petit développement Test-First, et j'essaie de vérifier que mes classes sont marquées avec un attribut:
[SubControllerActionToViewDataAttribute]
public class ScheduleController : Controller
Comment puis-je tester par unité que cet attribut lui est attribué?
regarde ça
Attribute.GetCustomAttribute(typeof(ScheduleController),
typeof(SubControllerActionToViewDataAttribute))
n'est pas nul (Assert.IsNotNull
ou similaire)
(la raison pour laquelle j'utilise ceci plutôt que IsDefined
est que la plupart du temps je veux aussi valider certaines propriétés de l'attribut ....)
La même chose que vous vérifieriez normalement pour un attribut sur une classe.
Voici un exemple de code.
typeof(ScheduleController)
.IsDefined(typeof(SubControllerActionToViewDataAttribute), false);
Je pense que dans de nombreux cas, tester l'existence d'un attribut dans un test unitaire est faux. Comme je n'ai pas utilisé la fonctionnalité de sous-contrôleur de MVC contrib, je ne peux cependant pas dire si elle est appropriée dans ce cas.
Il est également possible d'utiliser des génériques sur ceci:
var type = typeof(SomeType);
var attribute = type.GetCustomAttribute<SomeAttribute>();
De cette façon, vous n'avez pas besoin d'une autre typeof(...)
, ce qui peut rendre le code plus propre.
Je sais que ce fil est vraiment ancien, mais si quelqu'un tombe dessus, vous pouvez trouver fluentassertions projet très pratique pour faire ce genre d'assertions.
typeof(MyPresentationModel).Should().BeDecoratedWith<SomeAttribute>();