2009-11-23 5 views
5

Можете ли вы отделить компоненты приложения IceFaces, чтобы их можно было тестировать изолированно вместо использования чего-то вроде Selenium или HttpUnit в собранном приложении?Устройства тестирования ледяных поверхностей

Резервные бобы могут быть легко изолированы (если они подлежат проверке), но я заинтересован в тестировании частей шаблона/отображения приложения, используя как можно больше остальной части приложения. Это можно сделать? Как?

Есть ли способ визуализировать объект IceFaces в виде текста с использованием «фиктивных данных», который я могу выполнить через традиционные модульные тесты?

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

+1

Для всех начинающих дизайнеров рамок ... пожалуйста, подумайте о том, как лучше всего разместить тестирование на этапе проектирования. :-P –

+0

Аминь! Это определенно конструктивное ограничение, которое нужно учитывать. – Ryan

ответ

1

Если я правильно понимаю ваш вопрос, то это должно быть простым делом для создания специальных фиктивных бэкбонов для ваших страниц, а затем создания теста Файл конфигурации JSF, сопоставляющий эти beans-файлы с файлами .jspx. Разумеется, фиктивные компоненты не будут касаться какой-либо бизнес-логики или вспомогательных служб - они будут просто простыми наборами данных, которые будут легко проверяться в ваших тестах.

Создайте скрипт муравья, который будет заменен в ваших фиктивных бэкэндах и тестовом конфигурационном файле. Запустите тесты. Если вы не хотите что-то столь же тяжелое, как HTTPUnit, и если вы используете Spring в своем приложении, посмотрите на this blog post для отличного способа создания полного веб-контекста без веб-сервера. Вероятно, ваши тесты будут обнюхать исходный HTML-вывод, чтобы проверить результаты.Это будет сложно, потому что IceFaces любит делить идентификаторы DIV и другие соответствующие части дерева DOM, которые вы, возможно, захотите понюхать. (Это само по себе может быть причиной того, что очень немногие разработчики JSF пытаются выполнить единичный тестовый вывод JSF.)

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

Voila! Вы только что тестировали свои компоненты JSF.

Имейте в виду, что вся деятельность по замене фасоли и файлов конфигурации беспорядочна. Было бы намного проще, если бы IceFaces использовали Spring для сопоставления бэкбонов с страницами JSF - тогда вы могли бы просто определить тестовые компоненты в application.xml с соответствующими тестовыми классами. Но такова жизнь.

Удачи, и дайте мне знать, как это работает для вас!

1

Это не то, о чем вы просите, но JSFUnit (который использует JUnit, Cactus, HtmlUnit и HttpUnit), кажется, является серьезным кандидатом для тестирования на земле JSF. Вы рассмотрели этот вариант? Возможно, посмотрите на JSFUnit Wiki и его Getting Started Guide.

Пожалуйста, обратите внимание, что ФАК сообщает некоторые проблемы с ICEfaces, но его довольно старый (в начале 2009), и ситуация может измениться с тех пор (есть некоторые демонстрационные проекты, такие как jboss-jsfunit-examples-icefaces или icefaces-demo-address в JBoss хранилища, так что может быть стоит задайте точное состояние в списках рассылки JSFUnit или IceFaces).

EDIT: Как уже упоминалось в комментарии, ОП ищет что-то меньшее «высокого уровня». Может быть, посмотрят на Shale Test Framework:

рамочной Test Shale предоставляют фиктивные библиотек объектов, а также базовые классы для создания собственного JUnit TestCase с.

Фиктивные объекты предоставляются в пакете org.apache.shale.test.mock для следующих интерфейсов контейнеров:

  • JavaServer Faces
  • Servlet

Отказ от ответственности: Apache Shale переехал в Attic в мае 2009 года (то есть он достиг своего конца жизни), но я не знаю никакой другой «зрелой» макетной рамки для JSF, поэтому я упомянуть об этом в любом случае (код все еще существует). Я буду следить за этой темой с очень высоким интересом к другим решениям :)

+0

Да, я посмотрел на это. К сожалению, это слишком «высокий уровень» для моих нужд. Я хочу протестировать каждую часть отдельно, а не весь стек, как это делает JSFUnit. – Ryan

Смежные вопросы