Я пытаюсь использовать fongo для модульного теста, и я добавляю еще одну конфигурацию mongo внутри теста, чтобы заменить оригинальную, но она не работает.Конфигурация весны mongo db для модульного теста
Я следовал некоторым учебникам использовать
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
этих два аннотаций для тестового класса, и я попробовал его, он не с бобом творений ошибки следующим образом:
java.lang.IllegalStateException: Failed to load ApplicationContext
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultServletHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]
org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'defaultServletHandlerMapping' threw exception; nested exception is java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling
java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling
Вот мой тестовый класс:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = Controller.class)
public class ApplicationTests {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = webAppContextSetup(webApplicationContext).build();
}
... Tests here ...
@After
public void tearDown() throws Exception {
}
@Configuration
@EnableMongoRepositories
@ComponentScan(basePackageClasses = { RecorderRepository.class })
static class MongoConfiguration extends AbstractMongoConfiguration {
@Override
protected String getDatabaseName() {
return "test-db";
}
@Override
public Mongo mongo() {
return new Fongo("test").getMongo();
}
@Override
protected String getMappingBasePackage() {
return "com.mongo.test";
}
}
}
Я использую spring-data-mongodb: 1.7.2.RELEASE и доступ к db путем вызова mo ngoOperation в моем приложении вместо autowired репозитория. Как это
private AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(MongoConfig.class);
private MongoOperations mongoOperation =
(MongoOperations) context.getBean("mongoTemplate");
ли причина, почему
@ComponentScan(basePackageClasses = { RecorderRepository.class })
не работает?
Как мне сделать, чтобы это сработало? Я буду благодарен за любую помощь, которую вы можете предоставить.
=============================================================================================================================================== ===============
Update:
Я попытался внедренный MongoDB, все еще есть проблемы, которые недоступны подключения к базе данных. Нужно ли мне настраивать что-нибудь еще? Или добавить аннотацию?
Вот моя конфигурация:
static class MongoConfiguration extends AbstractMongoConfiguration {
private MongodStarter starter = MongodStarter.getDefaultInstance();
@Override
public Mongo mongo() throws Exception {
return new MongoClient("localhost", 12345);
}
@Bean(destroyMethod = "stop")
public MongodProcess mongod() throws IOException {
return mongodExe().start();
}
@Bean(destroyMethod = "stop")
public MongodExecutable mongodExe() throws IOException {
return starter.prepare(mongodConfig());
}
@Bean
public IMongodConfig mongodConfig() throws IOException {
return new MongodConfigBuilder().version(Version.Main.PRODUCTION)
.net(new Net(12345,Network.localhostIsIPv6()))
.build();
}
}
Спасибо, что поделились этим, я попробую его позже. Нужно ли добавлять или корректировать любые аннотации в тестовом классе? –
Я обновил вопрос с новой конфигурацией. У вас есть идея заставить его работать? Благодаря! –