2

以下のアクションを持つMVC3アプリケーションがあります。

public class FooController : ApplicationController
{
  [My(baz: true)]
  public void Index()
  {
    return view("blah");
  }
}

この方法でMVCContribのTestHelperを使用して、インデックスがMyAttributeで装飾されていることを確認するテストを作成できます。

[TestFixture]
public class FooControllerTest
{
  [Test]
  public void ShouldHaveMyAttribute()
  {
    var fooController = new FooController();
    fooController.Allows(x => x.Index(), new List<Type>{typeof(MyAttribute)});
  }
}

質問-MyAttribute装飾にプロパティ「baz」がtrueであることが含まれていることをテストするために、このテストをどのように変更できますか?

4

1 に答える 1

1

単体テストで属性を検証する場合は、次のようにリフレクションを使用してコントローラーメソッドを検査する必要があります。

[TestFixture]
public class FooController Tests 
{
    [Test]
    public void Verify_Index_Is_Decorated_With_My_Attribute() {
        var controller = new FooController ();
        var type = controller.GetType();
        var methodInfo = type.GetMethod("Index");
        var attributes = methodInfo.GetCustomAttributes(typeof(MyAttribute), true);
        Assert.IsTrue(attributes.Any(), "MyAttribute found on Index");
        Assert.IsTrue(((MyAttribute)attr[0]).baz);
    }
}

これはあなたを助けるかもしれません

于 2013-01-23T05:25:12.863 に答える