2

我有一个具有以下操作的 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”为真?

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 回答