如何在nUnit测试中注册MVC4可移植区域和路由?

时间:2013-06-14 18:08:35

标签: asp.net-mvc asp.net-mvc-4 nunit portable-areas

我的MVC4解决方案包含三个项目:

  1. Web,一个MVC 4 Web应用程序
  2. MyAccount,便携式区域
  3. 测试,一个利用nUnit(和moq)
  4. 的类库

    Web的global.asax定义了一些路由,MyAccount(在其PortableAreaRegistration的实现中)也是如此。

    在我的nUnit测试中,我需要获得整个解决方案的路由集。我可以使用以下代码获取Web中定义的路由:

    if (RouteTable.Routes.Count == 0)
    {
        RouteRegistrationConfigurator.Configure();
        MvcApplication.RegisterRoutes(RouteTable.Routes);
    }
    

    当我尝试使用此功能扩展它以包含便携式区域时:

    if (RouteTable.Routes.Count == 0)
    {
        var areaRegistration = new MyAccountAreaRegistration();
        var areaRegistrationContext = new AreaRegistrationContext(areaRegistration.AreaName, RouteTable.Routes);
        areaRegistration.RegisterArea(areaRegistrationContext);
    
        RouteRegistrationConfigurator.Configure();
        MvcApplication.RegisterRoutes(RouteTable.Routes);
    }
    

    我收到InvalidOperationException:“由于对象的当前状态,操作无效。”在RegisterArea()电话。

    将此代码放在测试本身或TestFixtureSetUp方法中对错误没有任何影响。

    AreaRegistrationContext构造函数有一个可选的第三个参数object state。默认情况下,该值为null。给它一个空对象(new {}new object {})并不能解决错误。我无法找到关于state对象可以或应该是什么的任何文档。

    使用AreaRegistration.RegisterAllAreas()调用而不是注册特定区域会导致错误消息“InvalidOperationException:在应用程序的启动前初始化阶段无法调用此方法。”

    我看到这些区域注册行的示例可用于MVC2项目而没有此错误。关于MVC4的不同之处是如何改变我应该如何设置它?

0 个答案:

没有答案