我一直在尝试找到有关此问题的简单信息,但是我却一直无法做到这一点-我发现的内容一直模糊不清,让我无法理解正在发生的事情,或者对于错误的事情太具体了(例如)我为单元测试AuthorizeAttribute找到的教程。 (第三种选择当然是我太愚蠢了,以至于没有意识到我正在阅读要查找的信息...在这种情况下,我仍然需要帮助,因为我愚蠢:P)

我希望能够测试两件事:

  • 将给定的ActionFilter应用于某个 Action (以确保该 Action 符合要求)
  • 给定的ActionFilter可以完成预期的工作。

  • 而且我一无所知。有人可以将我实际需要测试的内容推向正确的方向吗?我的测试的“安排”,“行动”和“断言”部分应包含哪些内容?

    如果我不够清楚,请提供一些细节:

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

    我对Write也有一个GuestbookController操作。我想验证是否已将过滤器应用于此操作。

    最佳答案

    在测试中使用反射。

       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...
    
     }
    

    关于asp.net-mvc - 如何对自定义ActionFilter进行UnitTest?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/935276/

    10-10 02:08