2015-09-17 19 views
6

Sto eseguendo un semplice Junit Test di un controller in Spring Boot. Il codice di test è simile al seguente:Come prendere in giro Eureka quando si eseguono i test di integrazione in primavera?

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = {FrontControllerApplication.class}) 
@WebAppConfiguration 
@ComponentScan 
@IntegrationTest({"server.port:0", "eureka.client.registerWithEureka:false", "eureka.client.fetchRegistry:false"}) 
@ActiveProfiles("integrationTest") 
public class MyControllerIT { 

Negli application-integrationTest.properties ho le seguenti impostazioni: Eureka

####### Eureka 
eureka.serviceUrl.default=http://localhost:8767/eureka/ 
eureka.printDeltaFullDiff=false 
eureka.client.refresh.interval=1 
eureka.appinfo.replicate.interval=1 
eureka.serviceUrlPollIntervalMs=1000 
eureka.name=${spring.application.name} 

####### Netflix Eureka ####### 
eureka.client.serviceUrl.defaultZone=http://localhost:8767/eureka/ 
eureka.client.instanceInfoReplicationIntervalSeconds=1 
eureka.client.initialInstanceInfoReplicationIntervalSeconds=0 
eureka.instance.virtualHostName=${spring.application.name} 
eureka.instance.preferIpAddress=true 
eureka.instance.initialStatus=DOWN 
eureka.instance.leaseRenewalIntervalInSeconds=3 
eureka.instance.leaseExpirationDurationInSeconds=10 
eureka.instance.metadataMap.instanceId=${spring.application.name}:${spring.application.instance_id:${random.value}} 
eureka.eurekaserver.connectionIdleTimeoutInSeconds=5 
eureka.responseCacheAutoExpirationInSeconds=5 

quando un test JUnit iniziato vedo il seguente:

2015-09-16 16:46:03,905 ERROR localhost-startStop-1 com.netflix.discovery.DiscoveryClient Can't get a response from http://localhost:8767/eureka/apps/ Can't contact any eureka nodes - possibly a security group issue? com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:184) ~[jersey-apache-client4-1.11.jar:1.11]

Il test ha esito positivo, non è questo il problema, ma vedo un sacco di eccezioni tracce che ha a che fare con Eureka. Le domande sono se c'è un modo per prendere in giro eureka o un altro modo per saltare il brindisi quando si fanno i test?

Il vantaggio sarebbe più facile da vedere rilevanti tracce dello stack se il test fallirebbe e tst avrebbe eseguito molto più velocemente

risposta

9

È possibile impostare una proprietà di sistema per eureka.client.enabled=false per i test.

Se si sta eseguendo il test utilizzando Gradle si può fare questo:

tasks.withType(Test) { 
    systemProperty 'eureka.client.enabled', 'false' 
} 

Se si sta eseguendo i test in un IDE, allora dovrete impostare la proprietà di sistema anche lì.

+2

Bello. Questo ha risolto il mio problema. Questa annotazione impedisce la registrazione con eureka dai test di integrazione '@WebIntegrationTest ({" server.port: 0 "," eureka.client.enabled: false "})' – rixmath

+2

Naturalmente, al momento, questo è '@SpringBootTest ({" server.port: 0 "," eureka.client.enabled: false "})' –

+0

'@ SpringBootTest' è disponibile a partire da Spring Boot 1.4.0.M2 – nerdherd

11

Un'altra soluzione è quella di disabilitare il Cliente Eureka nelle application.properties o application.yml file con test/risorse

applications.properties:

eureka.client.enabled=false

application.yml:

eureka: client: enabled: false

Questo ha il vantaggio di non aver bisogno di remebe r per includere la proprietà di sistema per ogni test JUnit che richiede la disabilitazione del client Eureka.

+1

Questa dovrebbe essere la risposta accettata secondo me. Perfetto per gli sviluppatori pigri e intelligenti. –

+0

Grazie Vittorio, lo apprezzo! –

+0

Se si esegue la primavera con i profili, inserire questo in application-test.yml, quindi annotare il test @ActiveProfiles ("test") –