6

我有簡單的HttpApplication類:如何測試MVC 3中的區域註冊邏輯?

public class MvcApplication : HttpApplication 
{ 
    public void Application_Start() 
    { 
     // register areas 
     AreaRegistration.RegisterAllAreas(); 

     // register other stuff... 
    } 
} 

我的單元測試初始化​​HttpApplication,調用ApplicationStart和驗證應用程序啓動行爲。

這種方法運行良好,直到我不得不整合MVC領域。當AreaRegistration.RegisterAllAreas()通過單元測試調用,但以下情況除外得到投擲:

System.InvalidOperationException: This method cannot be called during the application's pre-start initialization stage.

是否有測試區的初始化邏輯的好方法嗎?

回答

4

臨時解決方法:

1)在MvcApplication,暴露虛擬方法RegisterAllAreas()

public class MvcApplication : HttpApplication 
{ 
    public void Application_Start() 
    { 
     // register areas 
     RegisterAllAreas(); 

     // register other stuff... 
    } 

    public virtual void RegisterAllAreas() 
    { 
     AreaRegistration.RegisterAllAreas(); 
    } 
} 

2)在說明書中,實現代理:

[Subject(typeof(MvcApplication))] 
public class when_application_starts : mvc_application_spec 
{ 
    protected static MvcApplication application; 
    protected static bool areas_registered; 

    Establish context =() => application = new MvcApplicationProxy(); 

    Because of =() => application.Application_Start(); 

    It should_register_mvc_areas =() => areas_registered.ShouldBeTrue(); 

    class MvcApplicationProxy : MvcApplication 
    { 
     protected override void RegisterAllAreas() 
     { 
      areas_registered = true; 
     } 
    } 
} 

3)測試AreaRegistration個實現單獨

4)排除MvcApplication.RegisterAllAreas()從測試覆蓋率

我不喜歡這種方式,但現在想不出一個更好的解決方案。
想法和意見,歡迎…