2016-06-01 12 views
0

spring-boot으로 앱을 구축 중입니다. 끈적 세션 관련 문제를 방지하기 위해, 나는 pom.xml에서 그 라인을 추가하여 자리에 레디 스 세션 저장소를 넣어 :단위 테스트에서 Redis 서버에 연결하지 못함

<dependency> 
    <groupId>org.springframework.session</groupId> 
    <artifactId>spring-session</artifactId> 
    <version>1.2.0.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-redis</artifactId> 
</dependency> 

및 application.properties에서 그 라인 :

spring.redis.host=localhost 
spring.redis.password=secret 
spring.redis.port=6379 

그것은처럼 일 매력. 내가 주석 @EnableRedisHttpSession을 사용하지 않아도 작동한다는 것에 놀랐다. 처음에는 좋았습니다.

문제점 : 실제 응용 프로그램을위한 Spring 구성과 단위 테스트 전용 Spring 구성이 있습니다. 단위 테스트 환경에서 Redis 연결은 쓸모 없으며 테스트 환경에 Redis 서버를 설치하지 않으면 테스트를 실패하게 만듭니다.

필자는 Maven Redis를 Maven 종속물로 설치할 수 있지만이 쓸모없는 연결을 해제하는 방법을 발견하면 더 깨끗하게됩니다.

아이디어가 있으십니까?

+1

봄 부트의'SessionAutoConfiguration'는에서 개막 당신은 당신의 응용 프로그램에서 제외 할 수 있습니다. ('@ SpringBootApplication' 또는 속성)은 [here] (https://github.com/pivotal-cla/blob/b35645d709fc4bae31b353eaddbd15374cf2570f/src/main/java/io/pivotal/cla/GithubClaApplication.java)를 참조하십시오. – mp911de

+0

@ mp911de이 기능은 응용 프로그램 conf 및 test conf에 모두 적용 할 때만 추가 할 수 있습니다. 응용 프로그램 conf에서만'@ EnableRedisHttpSession'을 수동으로 추가하면 테스트 구성에 의해 감지됩니다. 테스트 conf가 앱 구성 파일에서'@ EnableRedisHttpSession'을 감지하지 못하게하는 방법에 대한 아이디어가 있습니까? –

+0

'@Enable ... '주석은 복구되지 않습니다. 활성화 됨이 활성화됩니다. 프로파일이 당신을 도울 수 있다고 생각합니다. – mp911de

답변

0

@Profile 주석으로이를 수행 할 수 있습니다. Redis 구성을 NOT 단위 테스트 프로파일에서만 수행 할 수 있습니다. 같은 :

@Configuration 
@Profile("!" + Constants.SPRING_PROFILE_UNITTEST) 
public class RedisConfiguration { 
    @Bean 
    public RedisTemplate getRedisTemplate() {...} 
} 
0

내가 @ConditionalOnProperty를 사용하고 단위 테스트 (testing=true)를 실행하는 동안 속성을 설정하고있어이 레디 스 단위 테스트 문제를 해결합니다.

@Configuration 
public class SessionConfig { 
    @ConditionalOnProperty(name = "testing", havingValue = "false", matchIfMissing = true) 
    @EnableRedisHttpSession 
    public static class RedisSessionConfig { 
    } 

    @ConditionalOnProperty(name = "testing", havingValue = "true") 
    @EnableSpringHttpSession 
    public static class MapSessionConfig { 
     @Bean 
     public SessionRepository<ExpiringSession> sessionRepository() { 
      return new MapSessionRepository(); 
     } 
    } 
} 

그리고 단위 테스트에 대한 다음 코드를 : 그래서, 세션 구성을 위해 다음 코드를 사용하고

@RunWith(SpringRunner.class) 
@TestPropertySource(properties = "testing=true") 
@SpringBootTest(classes = Application.class) 
public class MyTest { 
}