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

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

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

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

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

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

Спасибо!
  • Вопрос задан
  • 9522 просмотра
Пригласить эксперта
Ответы на вопрос 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 базу.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ProfitClicks Краснодар
от 60 000 руб.
Finch Москва
от 60 000 руб.
Coms Москва
от 50 000 до 70 000 руб.
22 мая 2019, в 23:03
15000 руб./за проект
22 мая 2019, в 22:44
1000 руб./за проект