У меня есть приложение Spring Boot, которое использует библиотеку (мою), которая имеет зависимости Spring Data JPA.В библиотеке я использую интерфейсы репозитория JPA и пользовательский фрагмент репозитория, который использует интерфейс JpaSpecificationExecutor
.
У меня внутри библиотеки есть конфигурация @EnableJpaRepositories
, как показано ниже:
@EnableJpaRepositories(basePackages = "my.package.domain.jpa.repo", bootstrapMode= BootstrapMode.LAZY)
@EntityScan(basePackageClasses = {LookupConfig.class, LookupMapping.class})
@Configuration
public class LookupJpaConfiguration {}
Я также объявил (не сгенерировал) метамодели (с добавлением _
к имени класса) для классов сущностей в том же пакете, что и классы сущностей.
Основным приложением являетсятакже @SpringBootApplication
, с spring-boot-starter-parent:2.1.0
в качестве родителя.Это приложение использует библиотеку в качестве зависимости и @Autowire
класс из библиотеки.Само приложение не имеет прямых зависимостей от данных Spring.
Проблема в том, что я не могу запустить модульные тесты без добавления свойств для источника данных .
Этокак выглядит объявление тестового класса:
@ExtendWith({SpringExtension.class, MockitoExtension.class})
public class OrderStatusProcessorTest {
// Uses the library with JPA dependency
@MockBean private LookupService lookupService;
// The class being tested; uses LookupService
private final OrderStatusProcessor orderStatusProcessor;
public OrderStatusProcessorTest() {
orderStatusProcessor = new OrderStatusProcessor(lookupService);
}
...
Я уже пробовал @Mock
ing DataSource
и EntityManagerFactory
, но ни один из них не сработал.
Библиотекаpom file
<properties>
<spring-data-releasetrain.version>Lovelace-SR5</spring-data-releasetrain.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
При текущей настройке я вижу следующую ошибку:
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
...
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactoryBuilder' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactoryBuilder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.JpaVendorAdapter]: Factory method 'jpaVendorAdapter' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
Это работает, если я правильно предоставил свойства источника данных.Но я хочу, чтобы тесты запускались без фактического подключения к базе данных.
Дайте мне знать, если мне нужно предоставить больше информации.Заранее спасибо!