2016-04-28 5 views
2

В настоящее время я настраиваю модульный тест для проекта, над которым я работаю, и я столкнулся с небольшим количеством стены. Проект, над которым я работаю, использует mongoDB как свою базу данных, поэтому для модульного тестирования я хотел использовать Fongo для моделирования базы данных, чтобы я мог протестировать только самую функциональность. Но всякий раз, когда я запускаю тесты, он не может правильно создать mongoMappingContext Bean, и сами тесты терпят неудачу. Основная причина - исключение mappingException, но я не то, что вызывает это. Кто-нибудь еще испытывал подобную вещь при модульном тестировании с Fongo? Спасибо за аванс за вашу помощь!Не удалось создать «mongoMappingContext» Bean при модульном тестировании с Fongo

Тест DB конфигурационный файл, TestDatabaseConfiguration.java:

@Configuration 
@Import(value = MongoAutoConfiguration.class) 
@PropertySource("classpath:application.properties") 
@EnableMongoAuditing(auditorAwareRef = "springSecurityAuditorAware") 
@EnableMongoRepositories("com.x.repository") 
@ComponentScan(basePackages = {"com.x.service", "com.x.utility"}) 
public class TestDatabaseConfiguration extends AbstractMongoConfiguration { 
    private final Logger logger = LoggerFactory.getLogger(TestDatabaseConfiguration.class); 

    @Override 
    protected String getDatabaseName() { 
     return "test_app"; 
    } 

    @Override 
    public Mongo mongo() throws Exception { 
     // uses fongo for in-memory tests 
     return new Fongo("mongo-test").getMongo(); 
    } 

    @Override 
    protected String getMappingBasePackage() { 
     return "com.x.service"; 
    } 

    @Override 
    public MongoTemplate mongoTemplate() throws Exception { 
     return new MongoTemplate(mongo(), "test_app"); 
    } 

    @Bean 
    public CustomConversions customConversions() { 
     List<Converter<?, ?>> converterList = new ArrayList<>(); 
     OAuth2AuthenticationReadConverter converter = new OAuth2AuthenticationReadConverter(); 
     converterList.add(converter); 
     return new CustomConversions(converterList); 
    } 

    @Bean 
    public MongoMappingContext mongoMappingContext() throws ClassNotFoundException { 
     MongoMappingContext mappingContext = new MongoMappingContext(); 
     mappingContext.setInitialEntitySet(getInitialEntitySet()); 
     mappingContext.setSimpleTypeHolder(customConversions().getSimpleTypeHolder()); 
     mappingContext.setFieldNamingStrategy(fieldNamingStrategy()); 

     return mappingContext; 
    } 

    @Bean 
    public MongoDbFactoryBean dbFactoryBean() throws Exception { 

     MongoDbFactoryBean dbFactoryBean = new MongoDbFactoryBean(); 
     dbFactoryBean.setMongo(mongo()); 

     dbFactoryBean.setName("test_app"); 

     logger.info("Application database: {}", "test_app"); 

     return dbFactoryBean; 
    } 
} 

тест-файл, MarketingAutomationServiceTest.java:

@ContextConfiguration(classes = {TestDatabaseConfiguration.class}) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class MarketingAutomationServiceTest extends TestCase { 

    @Autowired 
    private MarketingAutomationService marketingAutomationService; 

    @Test 
    @UsingDataSet(locations = {"/one-marketing-automation-query.json"}, loadStrategy = LoadStrategyEnum.CLEAN_INSERT) 
    public void testGetQuery(){ 
     MarketingAutomationQuery result = marketingAutomationService.getQuery("555a3662e4b024fe6d7a9d3f"); 

     assertNotNull(result); 
    } 
} 

Трассировка ошибки я получаю от весны, когда я запустить тест:

09:51:19.715 [main] ERROR o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframewor[email protected]702657cc] to prepare test instance [null(com.x.service.MarketingAutomationServiceTest)] 
java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:94) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:72) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:200) [spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:252) [spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:254) [spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:217) [spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83) [spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68) [spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163) [spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) [.cp/:na] 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoMappingContext' defined in com.x.config.TestDatabaseConfiguration: Invocation of init method failed; nested exception is org.springframework.data.mapping.model.MappingException: Ambiguous field mapping detected! Both private final java.lang.reflect.Type org.springframework.data.util.TypeDiscoverer.type and private final java.lang.Class org.springframework.data.util.ClassTypeInformation.type map to the same field name type! Disambiguate using @DocumentField annotation! 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) ~[spring-context-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) ~[spring-context-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:125) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:68) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86) ~[spring-test-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    ... 25 common frames omitted 
Caused by: org.springframework.data.mapping.model.MappingException: Ambiguous field mapping detected! Both private final java.lang.reflect.Type org.springframework.data.util.TypeDiscoverer.type and private final java.lang.Class org.springframework.data.util.ClassTypeInformation.type map to the same field name type! Disambiguate using @DocumentField annotation! 
    at org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity$AssertFieldNameUniquenessHandler.assertUniqueness(BasicMongoPersistentEntity.java:264) ~[spring-data-mongodb-1.6.1.RELEASE.jar:na] 
    at org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity$AssertFieldNameUniquenessHandler.doWithPersistentProperty(BasicMongoPersistentEntity.java:251) ~[spring-data-mongodb-1.6.1.RELEASE.jar:na] 
    at org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity$AssertFieldNameUniquenessHandler.doWithPersistentProperty(BasicMongoPersistentEntity.java:245) ~[spring-data-mongodb-1.6.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:294) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity.verifyFieldUniqueness(BasicMongoPersistentEntity.java:150) ~[spring-data-mongodb-1.6.1.RELEASE.jar:na] 
    at org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity.verify(BasicMongoPersistentEntity.java:142) ~[spring-data-mongodb-1.6.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:298) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.addPropertiesForRemainingDescriptors(AbstractMappingContext.java:442) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:296) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.addPropertiesForRemainingDescriptors(AbstractMappingContext.java:442) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:296) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:427) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:607) ~[spring-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:295) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:427) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:607) ~[spring-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:295) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.addPropertiesForRemainingDescriptors(AbstractMappingContext.java:442) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:296) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.addPropertiesForRemainingDescriptors(AbstractMappingContext.java:442) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:296) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.addPropertiesForRemainingDescriptors(AbstractMappingContext.java:442) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:296) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.addPropertiesForRemainingDescriptors(AbstractMappingContext.java:442) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:296) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:427) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:607) ~[spring-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:295) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:470) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:427) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:607) ~[spring-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:295) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:257) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.initialize(AbstractMappingContext.java:373) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.data.mapping.context.AbstractMappingContext.afterPropertiesSet(AbstractMappingContext.java:363) ~[spring-data-commons-1.9.1.RELEASE.jar:na] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] 
    ... 40 common frames omitted 
+0

вам удалось решить эту проблему? –

ответ

0

Метод mongoMappingContext() уже прошел абстрактное класс, который вы расширяете, т. е. AbstractMongoConfiguration. У меня есть аналогичная настройка, и большинство свойств кажется правильным другим, что у вас есть 2 дополнительных компонента в вашем конфигурационном файле. CustomConversions и MongoMappingContext.

Вы можете попробовать удалить оба Бобы вы снова создают в вас проверить конфигурацию файла TestDatabaseConfiguration.java

@Bean 
public MongoMappingContext mongoMappingContext() 

@Bean 
public CustomConversions customConversions() 
Смежные вопросы