gpt4 book ai didi

asp.net-mvc - 如何对自定义 ActionFilter 进行单元测试?

转载 作者:行者123 更新时间:2023-12-04 15:28:25 25 4
gpt4 key购买 nike

我一直试图找到一些关于此的直接信息,但我一直无法找到 - 例如,我发现的内容对于我理解正在发生的事情来说含糊不清,或者对于错误的事情来说太具体了我找到的用于对 AuthorizeAttribute 进行单元测试的教程。 (当然,第三种选择是我太笨了,无法意识到我正在阅读我正在寻找的信息……在这种情况下,我仍然需要帮助,因为我很笨:P)

我希望能够测试两件事:

  • 将给定的 ActionFilter 应用于操作(以确保操作满足要求)
  • 给定的 ActionFilter 做它应该做的事情。

  • 而我一无所知。任何人都可以将我推向正确的方向,以了解我实际需要测试的内容吗?测试的安排、执行和断言部分应该包含哪些内容?

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

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

    我也有 WriteGuestbookController 的操作.我想验证过滤器是否应用于此操作。

    最佳答案

    在测试中使用反射。

       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 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/935276/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com