MVC Action属性测试

时间:2013-01-11 10:29:53

标签: c# asp.net-mvc asp.net-mvc-3 mvccontrib

我有一个带有以下操作的MVC3应用程序。

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

我可以编写一个测试,以这种方式使用MVCContrib的TestHelper验证Index是否使用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'为真?

1 个答案:

答案 0 :(得分: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);
    }
}

这可能会对你有所帮助