Написание JUNIT для сервлета?

#java #unit-testing #servlets #junit

#java #модульное тестирование #сервлеты #junit

Вопрос:

Я использую сервер приложений glassfish. Мне нужно написать junit для некоторого сервлета. Мой вопрос здесь в том, как я могу создать смоделированный контейнер, макет запроса и ответа с помощью основных библиотек Java или мне нужно использовать какой-то инструмент здесь?Любые указатели были бы полезны?

Ответ №1:

Как отмечает hvgotcodes, вполне возможно написать тесты JUnit для сервлетов. Но я бы посоветовал вам хорошенько подумать, прежде чем делать это.

Сервлеты — это прослушиватели HTTP-запросов; они запускаются в контейнере сервлета, отвечают на любые HTTP-запросы, которые поступают на их пути, и упаковывают результаты для отправки обратно. Это все, что они должны делать, на мой взгляд. Реальную работу лучше оставить другим объектам, которые сервлет может маршалировать. Это могут быть POJO, скорее всего, на основе интерфейса, что упростит тестирование без необходимости запуска контейнера сервлета для запуска теста. Если вы решите, что вам нужна та же функциональность в настройках, отличных от web, это легко сделать, потому что она уже находится в объектах, отличных от сервлета.

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

Комментарии:

1. Спасибо duffymo. Но на самом деле я просто хочу знать, как фреймворки тестирования сервлетов, такие как HttpUnit, создают имитируемый контейнер. Какая-то идея об этом?

Ответ №2:

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

2) Spring предоставляет некоторые фиктивные классы для тестов, включая запросы и ответы. Даже если вы не используете Spring, вы все равно можете использовать эти классы только для тестов.

Ответ №3:

Вы можете найти Arquillian из JBoss интересным — http://community.jboss.org/wiki/Arquillian .

Тест в контейнере!

Arquillian предоставляет простой механизм для тестирования кода вашего приложения внутри удаленного или встроенного контейнера или путем взаимодействия в качестве клиента контейнера.

Заявление о миссии

Миссия проекта Arquillian — предоставить простой набор тестов, который разработчики могут использовать для создания широкого спектра интеграционных тестов для своих Java-приложений (скорее всего, корпоративных приложений). Тестовый пример может быть выполнен внутри контейнера, развернут вместе с тестируемым кодом или путем координации с контейнером, действуя как клиент для развернутого кода.