私は少しテストファースト開発をしようとしています、そして私のクラスが属性でマークされていることを確認しようとしています:
[SubControllerActionToViewDataAttribute]
public class ScheduleController : Controller
クラスにその属性が割り当てられていることを単体テストするにはどうすればよいですか?
私は少しテストファースト開発をしようとしています、そして私のクラスが属性でマークされていることを確認しようとしています:
[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(...)
では、コードをよりクリーンにすることができる別のは必要ありません。
using
)どのエラーが発生しますか?
GetCustomAttribute<SomeAttribute>
メソッドが.NET 4.5から利用可能であり、IDEが3.5に設定されているため、すべてが明確になりました
私はこのスレッドが本当に古いことを知っていますが、誰かがそれに出くわした場合、fluentassertionsプロジェクトがこの種のアサーションを行うのに非常に便利であると感じるかもしれません。
typeof(MyPresentationModel).Should().BeDecoratedWith<SomeAttribute>();