Как издеваться над Эврикой при выполнении интеграционных тестов весной?

Я запускаю простое тестирование контроллера Junit в Spring Boot. Код теста выглядит так:

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

В application-integrationTest.properties у меня есть следующие настройки 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

когда начался тест junit, я вижу следующее:

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]

Тест пройден, проблема не в этом, но я вижу множество трассировок стека исключений, связанных с Eureka. Вопрос в том, есть ли способ издеваться над эврикой или другой способ пропустить ее при выполнении тестов?

Преимущество будет заключаться в том, что будет легче увидеть соответствующие трассировки стека, если тест завершится ошибкой, а tst будет работать намного быстрее.


person Keyhan    schedule 17.09.2015    source источник


Ответы (2)


Другим решением является отключение клиента Eureka в файле application.properties или application.yml под тестом/ресурсами.

приложения.свойства:

eureka.client.enabled=false

приложение.yml:

eureka: client: enabled: false

Преимущество этого заключается в том, что не нужно помнить о включении системного свойства для каждого теста JUnit, который требует отключения клиента Eureka.

person Michael Harris    schedule 04.08.2016
comment
На мой взгляд, это должен быть принятый ответ. Идеально подходит для ленивых и умных разработчиков. - person Víctor Herraiz; 10.08.2016
comment
Спасибо, Виктор, мне приятно! - person Michael Harris; 12.08.2016
comment
Если вы запускаете Spring с профилями, поместите это в application-test.yml, затем аннотируйте свой тест @ActiveProfiles(test) - person Andreas Lundgren; 30.09.2016

Вы можете установить системное свойство для eureka.client.enabled=false для тестов.

Если вы запускаете тесты с помощью gradle, вы можете сделать это:

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

Если вы запускаете тесты в среде IDE, вам также необходимо установить системное свойство.

person nerdherd    schedule 18.11.2015
comment
Хороший. Это решило мою проблему. Эта аннотация предотвращает регистрацию в eureka из интеграционных тестов @WebIntegrationTest({"server.port:0", "eureka.client.enabled:false"}) - person rixmath; 02.01.2016
comment
Конечно, на данный момент это @SpringBootTest({"server.port:0", "eureka.client.enabled:false"}) - person Michael Piefel; 19.05.2016
comment
@SpringBootTest доступен, начиная с Spring Boot 1.4.0.M2 - person nerdherd; 20.05.2016