6

que tienen clase simple HttpApplication:¿Cómo pruebo la lógica de registro de área en MVC 3?

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

     // register other stuff... 
    } 
} 

Mis pruebas unitarias inicializar HttpApplication, invocar ApplicationStart y verificar la aplicación el comportamiento de puesta en marcha.

Este enfoque funcionó bien hasta que tuve que integrar áreas MVC. Cuando se invoca AreaRegistration.RegisterAllAreas() por una unidad de prueba, la siguiente excepción es lanzada:

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

¿Hay un buen enfoque para la lógica de inicialización zona de pruebas?

Respuesta

4

solución temporal:

1) En MvcApplication, exponer método virtual RegisterAllAreas()

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

     // register other stuff... 
    } 

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

2) En la memoria descriptiva, implementar un proxy:

[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) Prueba AreaRegistration implementaciones de forma individual

4)MvcApplication.RegisterAllAreas() Excluir de cobertura de la prueba

No me gusta este enfoque, pero no puedo pensar en una mejor solución en este momento.
Ideas y comentarios son bienvenidos & hellip;

Cuestiones relacionadas