私は少しテストファースト開発をしようとしています、そして、クラスが属性でマークされていることを確認しようとしています:
[SubControllerActionToViewDataAttribute]
public class ScheduleController : Controller
クラスにその属性が割り当てられていることを単体テストするにはどうすればよいですか?
それを確認します
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>();