12

I am running a simple Junit Testing a Controller in Spring Boot. The test code looks like this:

@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 the application-integrationTest.properties I have the following Eureka Settings:

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

when a junit test started I see the following:

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]

The test passes, that is not the problem, but I see a lot of exception stack traces that has to do with Eureka. The questions is if there is a way to mock eureka or another way to skip brining it up when doing tests?

The benefit would be easier to see relevant stack traces if test would fail and tst would run much faster

Keyhan
  • 121
  • 1
  • 1
  • 5

2 Answers2

27

Another solution is to disable the Eureka Client in your application.properties or application.yml file under test/resources

applications.properties:

eureka.client.enabled=false

application.yml:

eureka: client: enabled: false

This has the benefit of not needing to remeber to include the system property for every JUnit test that requires disabling the Eureka Client.

Michael Harris
  • 509
  • 5
  • 6
13

You can set a system property for eureka.client.enabled=false for tests.

If you're running the tests using gradle you can do this:

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

If you're running tests in an IDE then you'll have to set the system property there as well.

nerdherd
  • 2,508
  • 2
  • 24
  • 40
  • 2
    Nice. This solved my problem. This annotation prevents registration with eureka from Integration tests `@WebIntegrationTest({"server.port:0", "eureka.client.enabled:false"})` – rixmath Jan 02 '16 at 10:50
  • 4
    Of course, as of now, this is `@SpringBootTest({"server.port:0", "eureka.client.enabled:false"})` – Michael Piefel May 19 '16 at 14:20
  • `@SpringBootTest` is available starting with Spring Boot 1.4.0.M2 – nerdherd May 20 '16 at 13:05