我一直试图找到一些关于此的直截了当的信息,但我无法 - 或者我发现的任何一件事都模糊不清我理解发生了什么,或者对于错误的事情过于具体,例如我发现用于单元测试AuthorizeAttribute的教程。 (第三种选择当然是我太笨了,没有意识到我正在阅读我正在寻找的信息......在这种情况下我仍然需要帮助,因为我很笨:P)
我希望能够测试两件事:
我很无能为力。谁能让我朝着正确的方向推动我真正需要测试的东西?我的安排,行动和断言部分应包含哪些内容?
一点点细节,如果我不够清楚:
我有一个CustomValidationFilter
应该检查两个提交的表单值是否相同,如果没有则添加ModelStateError
。我想验证错误是否添加了正确的错误消息,如果值不相同,并且如果值 相等,则错误不添加(和非空)。
我还对Write
进行了GuestbookController
操作。我想验证过滤器是否已应用于此操作。
答案 0 :(得分:4)
在测试中使用反射。
var method = typeof(MyController).GetMethod("MyMethod");
var attribute = method.GetCustomAttributes(typeof(CustomValidationFilter),false);
.Cast<CustomValidationFilter>()
.SingleOrDefault();
Assert.IsNotNull( attribute );
Assert.AreEqual( "value", atttribute.SomeProperty );
为您班级中的方法创建单元测试。使用适当的数据模拟filterContext并检查该方法应该设置的任何变量,实际上是您期望的那样。
public void AttributeTest()
{
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var controller = new FakeController();
controller.controllerContext = new ControllerContext( httpContext, new RouteData(), controller );
...
attribute.OnActionExecuting( filterContext );
Assert...
}
答案 1 :(得分:0)
这是一篇博文,介绍如何扩展和单元测试自定义授权过滤器。博客文章详细介绍了您的两个问题,即如何测试给定ActionFilter应用于某个操作,以及如何测试ActionFilter是否执行了它应该执行的操作。
http://blog.geniar.com/index.php/2009/05/aspnet-mvc-testing-a-custom-authorize-filters/