使用 AttributeRouting 和 MvcRouteTester 对 MVC 4 路由进行单元测试

本文关键字:路由 单元测试 MVC AttributeRouting MvcRouteTester 使用 | 更新日期: 2023-09-27 18:35:54

所以我一直在研究这个问题,但我找不到解决我的问题的方法

我有一个 MVC4/Web API 应用程序,我正在使用 AttributeRouting 3.5.6

我的应用程序工作正常。

我能够使用以下响应对 Web API 路由进行单元测试

属性路由不使用 HttpConfiguration 对象来编写集成测试

我现在想做的是对我的 MVC4 路由进行单元测试,但我还没有找到一种方法来做到这一点

发现了以下问题,我想知道是否有解决方法

https://github.com/mccalltd/AttributeRouting/issues/64

基本上问题似乎是从内存中的属性加载路由以进行我的单元测试

这是我到目前为止尝试过的:

routes.MapAttributeRoutes(x =>
{
    x.AddRoutesFromAssembly(typeof(HomeController).Assembly);
    x.AddRoutesFromAssemblyOf<HomeController>();
    x.AddRoutesFromController(typeof(HomeController));
    x.AddRoutesFromController<HomeController>();
    x.AddRoutesFromControllersOfType(typeof(Controller));
    x.AddRoutesFromControllersOfType<Controller>();
});
  • 当我使用任何程序集方法时,路由集合为空

  • 当我使用任何控制器方法时,我收到以下异常:

    System.Security.VerificationException: Method AttributeRouting.Web.Mvc.Configuration.AddRoutesFromControllersOfType: 类型参数 'MyNamespace.Controllers.HomeController' 违反了类型参数 'T' 的约束。

它必须是一种方式,因为当我运行应用程序时,它工作得很好,我的所有路由都注册在RoutesCollection

使用 AttributeRouting 和 MvcRouteTester 对 MVC 4 路由进行单元测试

将以下内容添加到测试项目的 app.config

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>