Как выполнить модульное тестирование серверных элементов управления при обратной передаче? - PullRequest
3 голосов
/ 24 марта 2009

Я пытаюсь создать свой собственный EasyBinderDropDown, который в настоящее время выглядит следующим образом:

public class EasyBinderDropDown : DropDownList, ICanBindToObjectsKeyValuePair {
        public void BindToProperties<TYPE_TO_BIND_TO>(IEnumerable<TYPE_TO_BIND_TO>
                  bindableEnumerable,
        Expression<Func<TYPE_TO_BIND_TO, object>> textProperty, 
        Expression<Func<TYPE_TO_BIND_TO, object>> valueProperty) {...}
        public bool ShowSelectionPrompt { get; set; }
        public string SelectionPromptText { get; set; }
        public string SelectionPromptValue { get; set; }
    //...
}

По сути, это очень полезно для простой привязки к объектам из кода, поскольку вы просто делаете что-то вроде _dropDown.BindToProperties (myCustomers, c => c.Name, c => c.Id) и работает для вас, также настройка ShowSelectionPrompt и SelectionPromptText Я легко могу иметь строку «Выбор клиента». Я не хочу спрашивать так много о моей конкретной реализации, скорее я не понимаю, как писать модульные тесты для некоторых сценариев.

Например, мои текущие тесты охватывают элемент управления, который создается должным образом во время загрузки и правильно выводит его вывод, но я теряюсь в том, как проверить, что происходит, когда элемент управления отправляется обратно. Может кто-нибудь дать мне совет, как это проверить? Я бы предпочел сделать это без насмешек HTTPContext или чего-то подобного. Есть ли способ, которым я могу имитировать перестраиваемый элемент управления?

Ответы [ 2 ]

2 голосов
/ 26 марта 2009

«Я бы предпочел сделать это без насмешки над HTTPContext или чем-то подобным. Есть ли способ, которым я могу имитировать перестраиваемый элемент управления.»

По определению вы не просите «модульный тест»; Вы ищете «интеграционный тест». Если вы не высмеиваете основные зависимости, в данном случае компоненты времени выполнения ASP.NET, то, что вы тестируете, это интеграция между вашим элементом управления и ASP.NET.

Если вы не хотите издеваться над HttpContext и друзьями, я бы предложил автоматизированную среду веб-тестирования, такую ​​как Selenium или NUnitAsp.

0 голосов
/ 24 марта 2009

Обновление: На основании комментария. У вас нет доступа к коду напрямую к IsPostback или другим вещам asp.net. Оберните их простыми классами / интерфейсами. Как только вы это сделаете, отправьте макеты, которые реализуют эти интерфейсы. Таким образом, вам не нужно высмеивать весь HttpContext, только кусочки, которые имеют значение для кода (которые действительно понятны на основе задействованных интерфейсов).

Кроме того, учитывая, что это пользовательский элемент управления asp.net, вы не хотите навязывать требования к внешним вещам, таким как внедрение зависимостей. Есть конструктор по умолчанию (без параметров), который настраивает элемент управления для использования материала asp.net. Используйте конструктор с большим количеством параметров для отправки проверенных версий.


Первоначальный ответ:

Мне кажется, вы ищете золотую середину между юнит-тестами и интеграционными тестами. Вы работаете с пользовательским элементом управления, который может работать неправильно в разных частях жизненного цикла страницы asp.net.

Я бы:

  • Проверьте, можете ли вы перемещать части кода из пользовательского элемента управления, чтобы отделить классы, вы можете легче модульный тест
  • Для простых сценариев полагайтесь на функциональные тесты остальной части проекта, чтобы выявить любые дальнейшие проблемы с элементом управления (используйте watin / selenium rc).
  • Для более сложных сценариев, например, если элемент управления будет использоваться в различных параллельных проектах или будет предоставлен общественности, настройте несколько тестовых страниц и автоматизируйте их (снова watin / selenium rc).

Вы пишете тесты в watin / selenium rc на c # и запускаете их в своей "модульной" тестовой среде. Обязательно держите их отдельно от модульных тестов, так как они будут работать медленнее.

Ps. Я не использовал поддержку MS Test для asp.net, он может иметь некоторую поддержку для того, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...