2015-09-17 16 views
6

Ich benutze einen einfachen Junit Controller im Spring Boot testen. Der Test-Code sieht wie folgt aus:Wie kann Eureka bei Integrationstests im Frühjahr verhöhnt werden?

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

In den application-integrationTest.properties Ich habe folgende Eureka Einstellungen:

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

wenn ein JUnit-Test begann ich folgendes sehen:

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]

Der Test besteht, das ist nicht das Problem, aber ich sehe eine Menge Ausnahme Stapel Spuren, die mit Eureka zu tun haben. Die Frage ist, ob es eine Möglichkeit gibt, Eureka zu verspotten, oder eine andere Möglichkeit, es beim Testen zu überspringen.

Der Vorteil wäre einfacher, relevante Stack-Traces zu sehen, ob Test und tst würde viel schneller

Antwort

9

Sie eine Systemeigenschaft für eureka.client.enabled=false für Prüfungen durch fehlschlagen würde laufen.

Wenn Sie die Tests laufen gradle verwenden, können Sie dies tun:

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

Wenn Sie Tests in einer IDE laufen dann werden Sie die Systemeigenschaft auch dort eingestellt haben.

+2

Schön. Das hat mein Problem gelöst. Diese Annotation verhindert die Registrierung bei Eureka durch Integrationstests '@WebIntegrationTest ({" server.port: 0 "," eureka.client.enabled: false "})' – rixmath

+2

Natürlich ist dies ab sofort @SpringBootTest ({" server.port: 0 "," eureka.client.enabled: false "})' –

+0

'@ SpringBootTest' ist verfügbar ab Spring Boot 1.4.0.M2 – nerdherd

11

Eine andere Lösung ist es, die Eureka-Client in Ihrem application.properties oder application.yml Datei im Test/Ressourcen deaktivieren

applications.properties:

eureka.client.enabled=false

application.yml:

eureka: client: enabled: false

Dies hat den Vorteil, dass keine Remanenz erforderlich ist r, um die Systemeigenschaft für jeden JUnit-Test einzuschließen, für den der Eureka-Client deaktiviert werden muss.

+1

Dies sollte meiner Meinung nach die akzeptierte Antwort sein. Perfekt für faule und intelligente Entwickler. –

+0

Danke Victor, ich schätze es! –

+0

Wenn eine Feder mit Profilen ausgeführt wird, geben Sie diese in application-test.yml ein und beschriften Sie dann Ihren Test mit @ActiveProfiles ("test") –