У меня есть приложение Spring Boot с репозиториями JPA и Mon go, и, хотя все написанные тесты репозитория JPA, которые я написал, работают нормально, тесты MongoDB проваливаются из-за проблем с созданием bean-компонентов в репозиториях JPA.
Вот пример теста MongoDB, взятый почти прямо из Baeldung:
@ExtendWith(SpringExtension.class)
@DataMongoTest
public class BadgeRepositoryTest {
private final MongoTemplate mongoTemplate;
@Autowired
public BadgeRepositoryTest(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
@Test
public void test() {
System.out.println("Hello!");
}
}
И вот усеченная ошибка:
Failed to resolve parameter [org.springframework.data.mongodb.core.MongoTemplate mongoTemplate] in constructor [public com.foo.repositories.mongo.BadgeRepositoryTest(org.springframework.data.mongodb.core.MongoTemplate)]: Failed to load ApplicationContext
org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter [org.springframework.data.mongodb.core.MongoTemplate mongoTemplate] in constructor [public com.foo.repositories.mongo.BadgeRepositoryTest(org.springframework.data.mongodb.core.MongoTemplate)]: Failed to load ApplicationContext
at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameter(ExecutableInvoker.java:239)
at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameters(ExecutableInvoker.java:183)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:74)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestClassConstructor(ClassBasedTestDescriptor.java:329)
...
Caused by: java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123)
at org.springframework.test.context.junit.jupiter.SpringExtension.getApplicationContext(SpringExtension.java:202)
at org.springframework.test.context.junit.jupiter.SpringExtension.resolveParameter(SpringExtension.java:188)
at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameter(ExecutableInvoker.java:216)
... 75 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pollQuestionAnswerUserRepository': Cannot create inner bean '(inner bean)#7d9a0c94' 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)#7d9a0c94': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
Я уверен, что это дело необходимости отключать репозитории JPA во время тестов Mon go, но я не могу найти правильную комбинацию аннотаций или параметров конфигурации для этого. Или, может быть, я далеко от базы. В любом случае, кто-нибудь может указать мне правильное направление?