Отключить Spring Session в модульных и интеграционных тестах в приложении Spring Boot - PullRequest
0 голосов
/ 16 мая 2019

У меня есть приложение Spring Boot 1.5.21 с этим основным классом:

package com.myorg.myapp

@EnableSpringHttpSession
@EnableCaching
@SpringBootApplication
class MySpringBootApplication(private val env: Environment) {

Я хочу запустить интеграционные (@DataJpaTest) тесты без настройки внешнего кэша.

package com.myorg.myapp.repository

@ExtendWith(SpringExtension::class)
@DataJpaTest
class MyRepositoryTest(@Autowired private val libraryRepository: LibraryRepository) {

    @Test
    fun shouldDoSomething() {
        ...
    }
}

Проблема в том, что он выдает исключение, потому что не может найти компонент SessionRepository:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.session.SessionRepository<?>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1097)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
    ... 63 more

@DataJpaTest внутренне сканирует конфигурацию основного класса (MySpringBootApplication), которая содержит аннотацию @EnableSpringHttpSession,Это импортирует @Import(SpringHttpSessionConfiguration.class), который нуждается в компоненте SessionRepository:

    @Bean
    public <S extends ExpiringSession> SessionRepositoryFilter<? extends ExpiringSession> springSessionRepositoryFilter(
            SessionRepository<S> sessionRepository) {

Так как я могу заставить мои @DataJpaTest классы не инициализировать конфигурацию внешнего сеанса?

Я пробовал с excludeFilter, ноэто не сработало:

@DataJpaTest(excludeFilters = [ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value= [SpringHttpSessionConfiguration::class])])

...