Тестирование проекта веб-сайта с помощью NUnit

Я новичок в веб-разработке и у меня есть следующие вопросы

У меня есть проект веб-сайта. У меня есть один класс datacontext в папке App_Code, который содержит методы для работы с базой данных (там также присутствует схема dbml) и методы, которые напрямую не мешают db. Я хочу протестировать оба метода с помощью NUnit.

Поскольку Nunit работает с классами в .dll или .exe, я понял, что мне нужно будет либо преобразовать весь мой проект в веб-приложение, либо переместить весь код, который я хотел бы протестировать (т.е. все содержимое App_Code), в проект библиотеки классов и ссылка на проект библиотеки классов в проекте веб-сайта.

Если я решу переместить методы в отдельные dll, возникает вопрос, как мне протестировать там те методы, которые работают с базой данных? :

  • Придется ли мне создавать соединение с базой данных в методе «настройки» перед запуском каждого из таких методов? Верно ли, что в этом случае нет необходимости запускать веб-приложение?

  • Или мне нужно запустить такие тесты во время работы веб-сайта, когда соединение установлено? В этом случае, как настроить проект и Nunit?

  • или как-то иначе ..

Во-вторых, если метод зависит от некоторых настроек в моем файле .config, например, некоторых сетевых учетных данных или настройки smtp, каков подход к тестированию таких методов?

Буду очень признателен за любую помощь! Чем конкретнее, тем лучше. Спасибо.


person qwebek    schedule 21.06.2010    source источник


Ответы (1)


Как правило, вы должны имитировать свою базу данных, а не подключаться к ней для своих модульных тестов. Это означает, что вы предоставляете поддельные экземпляры класса доступа к данным, которые возвращают стандартные результаты. Как правило, вы должны использовать макет фреймворка, например Moq или Rhino, чтобы сделать это для вас, но многие люди также просто пишут свои собственные одноразовые классы для обслуживания та же цель. Ваши тесты не должны зависеть от настроек конфигурации рабочего веб-сайта.

Для этого есть много причин, но в основном это делается для того, чтобы отделить ваши тесты от реальной реализации базы данных. То, что вы описываете, приведет к очень хрупким тестам, требующим серьезного ухода.

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

person womp    schedule 21.06.2010
comment
Спасибо за объяснения! Поскольку мне нужно именно модульное тестирование, я дополнительно исследую правильность использования NUnit с веб-сайтом. - person qwebek; 22.06.2010