Я заметил, что с @EnableWebMvc
я получаю следующую ошибку при запуске моих тестов: A ServletContext is required to configure default servlet handling
.Эта проблема временно решается путем комментирования @EnableWebMvc
, затем все мои тесты проходят, однако я хочу это в своем веб-приложении.
Я прочитал в этом посте , что я мог бы поставить @EnableWebMvc
в другом классе конфигурации, который не включен в тесты (?).Итак, я попробовал это:
AppConfig.java
@Configuration
@ComponentScan(basePackages = "biz.martyn.budget")
@PropertySource("classpath:prod.properties")
@EnableTransactionManagement
public class AppConfig {
@Autowired
private Environment env;
@Bean(name = "dataSource", destroyMethod = "shutdown")
@Profile("prod")
public DataSource dataSourceForProd() {...
WebMvcConfig.java
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {...
Затем в моих тестах я пытаюсь:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
@Transactional
public class FundRepositoryTest {...
Тем не менее, я все еще вижу ту же ошибку в моих тестах.Я знаю, что это @EnableWebMvc
, поскольку все они проходят, когда я удаляю это.Я что-то неправильно понял, как работает аннотация @ContextConfiguration?Кстати, я использую Spring версию 4.2.2.RELEASE для всех моих зависимостей spring- *, если это поможет.
Ниже также ошибка, которую я вижу в моем тестовом прогоне:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultServletHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Bean instantiation via factory method failed; nested exception is 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
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)