Как я могу использовать Spring Cloud Schema Registry в модульных тестах - PullRequest
0 голосов
/ 30 апреля 2020

Я пишу приложение SpringBoot, которое использует сервер реестра Spring Cloud Schema. В моих модульных тестах я хотел бы запустить сервер реестра, чтобы я мог проверить свое преобразование сообщений. Поэтому мой модульный тест выглядит следующим образом:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { NerpMessageConfig.class, NerpMessageStream.class })
@SpringBootTest(classes = NerpMessageProcessorApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource("/appTest.yml")
@EnableSchemaRegistryServer
@EnableAutoConfiguration
public class NerpMessageProcessorTest
{
    .
    .
    .
}

Проблема в том, что при настройке сервера реестра Schema происходит сбой со следующей ошибкой, говорящей о том, что он не может найти entityManager:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schemaRepository': Cannot create inner bean '(inner bean)#48b81fcb' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#48b81fcb': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:389)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:134)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1699)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1444)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1306)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1226)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:885)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789)
... 70 more

Таким образом, представляется, что entityManager неправильно настроен для сервера схемы, и я не могу понять, почему. В моей сборке Gradle у меня есть следующие зависимости, которые, я думаю, должны правильно загрузить автоконфигурацию JPA:

implementation (group: 'org.hibernate', name: 'hibernate-core', version: '5.3.7.Final')
implementation (group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.3.7.Final')
implementation (group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: $springBootVersion)

, где $ springBootVersion = '2.2.4.RELEASE'

Может кто-нибудь увидеть, что Я тут не так делаю?

...