Тестирование Java EE приложения?

Здравствуйте,

подскажите пожалуйста поподробней, я так то в гугле покопался, но очень много всего…

Есть проект Java web-project [Spring, JPA, Hibernate, Vaadin].

Как писать тесты под такой проект?
TestNG, JUnit?

Может кто поделится ссылкой или подскажет, где рассматривается простейший пример тестирования такого проекта.(жел на русском)
Ну или в двух словах объяснит.

Спасибо!
  • Вопрос задан
  • 9767 просмотров
Пригласить эксперта
Ответы на вопрос 5
MrMig
@MrMig
Есть несколько разновидностей тестов. Если вы бэкэнд-разработчик, то вас, в первую очередь, будут интересовать два вида:
  1. Юнит-тесты
  2. Интеграционные тесты


Юнит-тесты — тесты, направленные на тестирование отдельных частей класса. Чаще всего это методы. Иногда — отдельные ветки методов (всегда справедливо для god objects).
Самый важный пункт: для юнит-тестирования не нужно поднимать контекст приложения! Вы тестируете логику отдельного юнита, а не связку классов. Поэтому, очень часто для юнит-тестирования использую мок-фреймворки (как пример — мокито). Это нужно для того, что не писать руками -заглушки связанных классов.

Что покрывается юнит-тестами? В первую очередь покрывайте бизнес-логику (сервисы, классы-менеджеры). После — контроллеры. Можно покрыть DAO-слой (опять же, если там есть сложная логика)0.

Как пишется юнит-тест? Вы берёте набор входных параметров, мокаете классы-зависимости, передаёте входные параметры в тестируемый метод и проверяете выходные параметры. Если в методе есть условия — необходимо попасть во все ветки.

Писать ли отдельный тестовый метод для каждой ветки? Это зависит от вашего стиля и от того, планируете ли вы рефакторинг в ближайшем будущем. По-хорошему, стоит выделять отдельные крупные ветки в отдельные методы, особенно для god objects.

Интеграционные тесты — это тестирование нескольких взаимосвязанных классов. К примеру, класс бизнес-логики + DAO-класс.
В случае интеграционного теста вам придётся поднимать контекст приложения (обычно для этого создаются отдельные конфигурационные файлы). К тому же, будет неплохо настроить транзакционность на уровне отдельных методов (для того, чтобы не чистить базу руками после изменений).

Нужны более глубокие подробности — пишите :)
Ответ написан
Alex42rus
@Alex42rus
У нас тот же стек технологий.
Мы используем обычные юнит тесты + селениум для тестирования GUI
Ответ написан
web_dev
@web_dev Автор вопроса
Буду признателен так же на ответ из моего комментария на ответ Alex42rus.
Ответ написан
@relgames
Java Developer
На прошлой работе мы делали юнит и интеграционные тесты. Для юнит-тестов использовали TestNG, для интеграционных — написали свой фреймворк, который эмулировал все подряд. Базу создавали в памяти.

На новой работе используем JUnit и собираемся перевести интеграционные тесты на in-memory базу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы