@ContextConfiguration не вводит только указанные классы конфигурации - PullRequest
0 голосов
/ 12 декабря 2018

Я заметил, что с @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)

1 Ответ

0 голосов
/ 13 декабря 2018

Я все еще не уверен, почему аннотация @ContextConfiguration не только принимает класс (ы), которые я предоставляю, но я обнаружил, что @WebAppConfiguration, добавленный к каждому тестовому классу, обеспечивает требуемый контекст:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
@Transactional
@WebAppConfiguration // <-- added this
public class FundRepositoryTest {...

Это дополнительная аннотация, которую мне нужно добавить, но мои тесты запускаются сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...