Лучшая практика интеграции TDD с разработкой веб-приложений?


26

Единичное тестирование и веб-приложения ASP.NET являются неоднозначной точкой в ​​моей группе. Чаще всего, хорошие методы тестирования падают через трещины и веб-приложения в конечном итоге живут в течение нескольких лет без каких-либо тестов.

Причина этой точки боли, как правило, связана со сложностью написания средств автоматизации пользовательского интерфейса.

Как вы или ваша организация интегрируете лучшие методы TDD с разработкой веб-приложений?

18

Модульное тестирование будет осуществимо, если вы должным образом отделите свои слои , Как подразумевал Роб Купер, не вставляйте логику в свой WebForm, кроме логики, чтобы управлять своей презентацией. Все остальные логические и персистентные слои должны храниться в отдельных классах, а затем вы можете тестировать их индивидуально.

Чтобы проверить GUI, некоторые люди любят selenium. Другие жалуются, что это боль, которую нужно настроить.

+1

ну, может быть Селен боль для некоторых, чтобы настроить .. но вот почему у других есть работа :) 13 июл. 152015-07-13 12:45:43


4

Я выкладываю приложение и, по меньшей мере, единичный тест от ведущего устройства/контроллера (в зависимости от вашего предпочтения, mvc/mvp) к слою данных. Таким образом, у меня есть хорошее покрытие для тестирования большей части написанного кода.

Я рассмотрел FitNesse, Watin и Selenium как опции для автоматизации тестирования пользовательского интерфейса, но у меня еще нет возможности использовать их в любых проектах, поэтому мы придерживаемся человеческого тестирования. FitNesse был тем, к которому я склонялся, но я не мог представить это, а также представить TDD (это делает меня плохой? Надеюсь, что нет!).


2

Это хороший вопрос, который я буду подписавшись тоже :)

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

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

Это идеальный вариант? Возможно, нет, но, по крайней мере, он по-прежнему весьма автоматизирован и основной код (где происходит большая часть «магии») все еще имеет довольно хороший охват.


2

Общепринятой практикой является перемещение всего кода, который вы можете использовать, из кода и в объект, который вы можете тестировать изолированно. Такой код обычно будет следовать шаблонам проектирования MVP или MVC. Если вы ищете «Rhino Igloo», вы, вероятно, найдете ссылку на репозиторий Subversion. Этот код стоит изучения, поскольку он демонстрирует одну из лучших реализаций MVP в Web Forms, которые я видел.

Ваш отделенного кода будет, когда после этого шаблона, сделать две вещи:

  1. Транзитные все действия пользователя к ведущему.
  2. Извлечь данные, предоставленные ведущим.

Единичное тестирование ведущего должно быть тривиальным.

Update: Rhino Иглу можно найти здесь: https://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo/


0

Там уже были попытки на получение бесплатного автоматизации пользовательского интерфейса Microsoft (включенный в .NET Framework 3.0) для работы с веб-приложений (ASP.NET). Немецкая компания под названием Artiso написала запись в блоге, в которой объясняется, как ее достичь (link).

Однако их блогпост также связывает веб-трансляции MSDN, объясняющие UI Automation Framework с winforms, и после того, как я посмотрел на это, я заметил, что вам нужен AutomationId, чтобы получить ссылку на соответствующие элементы управления. Однако в веб-приложениях элементы управления не имеют AutomationId.

Об этом я спросил у Томаса Шисслера (Artiso), и он объяснил, что это был главный недостаток InternetExplorer. Он ссылался на более старую технологию Microsoft (MSAA) и надеялся, что IE8 сделает это лучше.

Тем не менее, я также давал Watin попробовать, и кажется, что он работает очень хорошо. Мне даже понравился Wax, который позволяет реализовать простые тестовые файлы с помощью рабочих листов Microsoft Excel.


0

Ivonna блок можно проверить ваши мнения. Я по-прежнему рекомендую перенести большую часть кода на другие части. Тем не менее, некоторый код только принадлежит там, как ссылки на элементы управления или обработчики событий управления.


2

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

Попробуйте запустить тестовый набор до, написав строку фактического кода в новом проекте, так как труднее писать тесты позже.

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

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

Не доверяй. Предположим, что вы всегда будете делать ошибки, и поэтому вы пишете тесты, чтобы сделать вашу жизнь проще, а не сложнее.

Если вы не чувствуете себя хорошо о написании тестов, вы, вероятно, делают это неправильно;)