Как проверить логику регистрации области в MVC 3? - PullRequest
6 голосов
/ 05 марта 2012

У меня есть простой класс HttpApplication:

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.

Есть ли хороший подход для тестирования логики инициализации области?

1 Ответ

4 голосов
/ 05 марта 2012

Временное решение:

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() из тестового покрытия

Мне не нравится этот подход, но я не могу сейчас придумать лучшего решения.Идеи и комментарии приветствуются…

...