我有一个带有以下操作的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'为真?
答案 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);
}
}
这可能会对你有所帮助