Найти в Дзене

Тестирование вместе с Spring Boot. Часть 2

Статья подготовлена для студентов курса «Разработчик на Spring Framework» в образовательном проекте OTUS.

В прошлой части мы рассмотрели тестирование слоя контроллера, в этой части давайте рассмотрим поближе тестирование бизнес-слоя и слоя JPA-репозиториев.

К примеру у нас есть следующий код:

В данном примере у нас имеется SpringBoot-приложение с JPA-репозиторием и бизнес-сервисом, который работает, в частности, с репозиторием.

Чтобы протестировать сервис (бизнес-слой) в принципе не нужен SpringBoot — всегда можно создать моки (в данном случае PersonRepository), и если класс написан в соответствии с IoC, то нам вполне этого достаточно.

А можем всё-таки использовать аннотацию @SpringBootTest. Зачем, станет понятно чуть позже.

Итак, тест выглядит следующим образом:

-3

Разберёмся немного, как работает аннотация SpringBootTest:

1. Тест c @SpringBootTest находится в пакете ru.otus.example.service. Движок идёт по пакету вверх, пока не встретит класс, помеченный аннотацией @SpringBootConfiguration (как ни странно, это наш Main, потому что аннотация @SpringBootApplication помечена искомой).

2. Далее происходит поиск бинов, сервисов и других конфигураций согласно @ComponentScan (да, эта аннотация тоже включена в @SpringBootApplication), спускаясь от этого класса.

3. Но не все бины будут созданы для теста. Тест содержит поле PersonRepository, помеченное @MockBean. Поэтому вместо реального репозитория, в PersonService придёт мок.

4. Ну и после поднятия контекста в @Autowired придёт созданный сервис.

Подобная аннотация SpringBootTest позволяет также писать интеграционные тесты. В данном примере будет использоваться уже реальный JPA-репозиторий.

-4

Такие тесты используют настроенную в application.yml базу данных. В принципе, JPA-репозитории можно тестировать на embedded DB без особых проблем. Конечно, использование нативных SQL-скриптов и хранимых процедур сказывается на возможности и смысле такого тестирования. Но если вы используете только чистый JPA и, например, liquibase в формате YAML, то корректность маппингов проверить можно, и даже нужно — это позволит избежать ошибок на реальной БД.

И выглядит тест на JPA вот таким образом:

-5

На этом всё. Оставим читателю возможность самому изучить, всё-таки, на какой БД это будет выполнено!

Есть вопрос? Пишите комментарий!

Материал подготовлен для студентов курса «Разработчик на Spring Framework» в образовательном проекте OTUS. Чтобы присоединиться к ближайшей группе, обязательно пройдите вступительное тестирование:

ПРОЙТИ ТЕСТИРОВАНИЕ