Следует ли тестировать репозитории в приложениях Spring Boot напрямую?
Не уверен, будет ли это считаться "законным вопросом" или "основанным исключительно на мнении", но есть ли "лучшая практика" в отношении прямого тестирования хранилища в приложении Spring Boot? Или любое интеграционное тестирование должно быть просто нацелено на соответствующий сервис?
Причиной этого вопроса является просто тот факт, что по большей части репозиторий в приложении Spring Boot не содержит сгенерированного проектом кода. В лучшем случае он содержит сигнатуры определяемых проектом методов, для которых Spring генерирует реализации (при условии правильных соглашений об именах).
Спасибо...
3 ответа
Если вы можете испортить это, вы должны проверить это. Здесь есть возможность испортить:
- Пользовательские запросы (использующие @Query) могут быть ошибочными (возможны всевозможные логические ошибки или опечатки при написании запроса без проверки во время компиляции)
- Методы репозитория, в которых запрос получен из имени метода, могут не соответствовать вашим ожиданиям.
- Передав аргументы, тип в списке параметров может не соответствовать типу, необходимому в запросе (во время компиляции это не выполняется).
Во всех этих случаях вы не тестируете Spring Data JPA, вы тестируете функциональность, реализуемую с помощью Spring Data JPA.
Случаи использования предоставленных методов " из коробки", таких как findOne, findAll, save и т. Д., Где нет отпечатков пальцев, не требуют тестирования.
Это легко проверить, и лучше находить ошибки раньше, чем позже.
Исходя из идеи, что репозитории должны использоваться только внутри сервисов, а сервисы используются для взаимодействия с другими уровнями системы, я бы сказал, что тестирование сервисов должно быть достаточным в большинстве случаев.
Я бы не стал тестировать стандартные методы репозитория, такие как findAll или findBy.., они уже были протестированы, и цель состоит не в тестировании JPA, а в приложении.
Единственные методы репозитория, которые должны иметь прямые тесты, - это методы с пользовательскими запросами. Эти запросы могут быть расположены в общей библиотеке, и неэффективно писать похожие тесты для разных проектов (в этом случае регрессия является большой проблемой)
Да, я думаю, что это хорошая практика. Вы можете использовать аннотацию @DataJpaTest, она запускает базу данных в памяти. Официальная документация гласит:
You can use the @DataJpaTest annotation to test JPA applications. By default, it configures an in-memory embedded database, scans for @Entity classes, and configures Spring Data JPA repositories. Regular @Component beans are not loaded into the ApplicationContext.
Ссылка на документы: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html