2016-06-01 10 views
0

Ich baue eine App mit spring-boot. Um sticky-Sitzung im Zusammenhang Probleme zu vermeiden, habe ich an Ort und Stelle einen redis Session-Speicher durch diese Zeilen in pom.xml Zugabe:Verhindern Verbindung zu Redis-Server in Komponententests

<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> 

und diese Zeilen in application.properties:

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

Es funktionierte wie Ein Zauber. Ich war überrascht, dass es funktioniert, auch wenn ich die Anmerkung @EnableRedisHttpSession nicht verwendet habe. Am Anfang fand ich es schön.

Problem: Ich habe eine Spring-Konfiguration für die reale Anwendung und auch eine Spring-Konfiguration für Komponententests. Die Redis-Verbindung ist in der Komponententestumgebung nutzlos und führt dazu, dass der Test fehlschlägt, wenn ich keinen Redis-Server in der Testumgebung installiere.

Ich könnte schließlich eine Mock Redis als Maven-Abhängigkeit installieren, aber es wäre sauberer, wenn ich einen Weg finden würde, diese nutzlose Verbindung zu deaktivieren.

Irgendeine Idee?

+1

Frühling Stiefel ist 'SessionAutoConfiguration' tritt in Sie es in Ihrer Anwendung ausschließen. ('@ SpringBootApplication' oder Eigenschaften), siehe [hier] (https://github.com/pivotalsoftware/pivotal-cla/blob/b35645d709fc4bae31b353eaddbd15374cf2570f/src/main/java/io/pivotal/cla/GithubClaApplication.java) – mp911de

+0

@ mp911de Das Hinzufügen funktioniert nur, wenn ich es sowohl auf das Anwendungsconf als auch auf das Testconf anwende. Wenn ich "@ EnableRedisHttpSession" manuell nur für das Anwendungskonf hinzufüge, wird es auch von der Testkonfiguration erkannt. Haben Sie eine Idee, wie ich verhindern kann, dass der Test conf "@ EnableRedisHttpSession" auf dem App-Conf erkennt? –

+0

Es gibt keine Wiederherstellung von einer '@Enable ...' Annotation. Aktiviert ist aktiviert. Ich denke, Profile könnten dir hier helfen. – mp911de

Antwort

0

Sie können dies mit @Profile Annotation tun. Sie können Ihre Redis-Konfiguration nur im NOT-Unit-Testprofil ausführen lassen. dies wie:

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

Um dieses Redis Unit-Test-Problem zu lösen I @ConditionalOnProperty und Einstellen eine Eigenschaft bin mit, während das Gerät Test läuft (testing=true). Also, ich bin mit dem folgenden Code für die Sitzungskonfiguration:

@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(); 
     } 
    } 
} 

Und den folgenden Code für das Gerät zu testen:

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