Тестируемый модуль DotNetNuke, в котором вызывается EditUrl или NavigateUrl

Я использую структуру WebFormsMvp для выполнения TDD при разработке модуля DNN (DNN 6.1).

Я следую самым последним руководствам, которые могу найти, но столкнулся с проблемами с классом DNN ModuleInstanceContext. Например, если я попытаюсь вызвать ModuleContext.EditUrl в своем презентере, модульные тесты завершатся неудачей (запуск модуля на самом деле не завершится ошибкой), потому что ModuleInstanceContext имеет зависимости, которые разрешаются в конкретный экземпляр HttpContext и/или хотят сделать фактические вызовы Db. (для получения PortalAlias ​​и т.п.).

Существует ли в сообществе DNN передовая практика для модульного тестирования, когда необходимы вызовы методов в ModuleInstanceContext?


person E Michael Bradley    schedule 01.08.2012    source источник


Ответы (1)


В этих случаях я создал класс NavigationService, который я инициализирую контекстом в конструкторе презентатора. Например:

public MyPresenter(IMyView view) : this(view, null) {}
internal MyPresenter(IMyView view, INavService navService) {
    this.navService = navService ?? new DnnNavService(this.ModuleContext);
}

Если мне нужно получить доступ к строке запроса из службы навигации, она еще не инициализирована в конструкторе, поэтому вместо этого я передаю Lazy<NameValueCollection>, указывающий на нее.

person bdukes    schedule 02.08.2012
comment
Я не совсем понимаю вашу ссылку на строку запроса, поскольку мой вопрос касается вызова функции ModuleContext.EditUrl в коде, который проходит модульное тестирование, и не связан с доступом к строке запроса. Но я думаю, что вы говорите, что я должен создать класс-оболочку вокруг ModuleInstanceContext, а затем этот класс-оболочку может реализовать интерфейс, который я могу имитировать в своих модульных тестах. Правильный? - person E Michael Bradley; 07.08.2012
comment
Правильно. Я просто добавил примечание, что если вы создаете NavigationService, его может заинтересовать строка запроса (либо для распространения параметров, либо для чтения строки запроса в дополнение к навигации), и не на 100% просто ссылаться на нее в конструкторе . - person bdukes; 07.08.2012