Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

  • Передать все действия пользователя ведущему.
  • Предоставить данные, предоставленные ведущим.

Тестирование устройства ведущим должно быть тривиальным.

Обновление: Rhino Igloo можно найти здесь: https://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo/

Ответ 5

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

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

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

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

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

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

Ответ 6

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

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

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

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

Ответ 7

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