加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 我如何UnitTest自定义ActionFilter?

发布时间:2020-12-15 19:54:40 所属栏目:asp.Net 来源:网络整理
导读:我一直试图找到一些关于此的直截了当的信息,但是我无法 – 或者我发现的一直是模糊的让我理解正在发生的事情,或者对于错误的事情来说太具体了,例如我找到了一个单元测试AuthorizeAttribute的教程. (第三种选择当然是我太笨了,没有意识到我正在阅读我正在寻找
我一直试图找到一些关于此的直截了当的信息,但是我无法 – 或者我发现的一直是模糊的让我理解正在发生的事情,或者对于错误的事情来说太具体了,例如我找到了一个单元测试AuthorizeAttribute的教程. (第三种选择当然是我太笨了,没有意识到我正在阅读我正在寻找的信息……在这种情况下我仍然需要帮助,因为我很笨:P)

我希望能够测试两件事:

>将给定的ActionFilter应用于某个操作(以确保该操作符合要求)
>一个给定的ActionFilter做它应该做的事情.

而且我很无能为力.谁能让我朝着正确的方向推动我真正需要测试的东西?我的安排,行动和断言部分应包含哪些内容?

一点点细节,如果我不够清楚:

我有一个CustomValidationFilter,它应该检查两个提交的表单值是否相同,如果没有则添加ModelStateError.我想验证错误是否添加了正确的错误消息,如果值不相同,并且如果值相等(并且为非null)则不添加错误.

我还在GuestbookController上有一个Write动作.我想验证过滤器是否已应用于此操作.

解决方法

在测试中使用反射.
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...

 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读