2015-09-17 2 views
6

Я запускаю простой Junit Testing Controller в Spring Boot. Тестовый код выглядит следующим образом:Как насмехаться над Eureka при проведении тестов интеграции весной?

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

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

Выгода будет легче увидеть соответствующие следы стека, если тест потерпит неудачу и TST будет работать намного быстрее

ответ

9

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

Если вы работаете тесты с использованием Gradle вы можете сделать это:

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

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

+2

Nice. Это решило мою проблему. Эта аннотация предотвращает регистрацию в eureka из тестов интеграции @ @InIntegrationTest ({"server.port: 0", "eureka.client.enabled: false"}) ' – rixmath

+2

Конечно, на данный момент это' @SpringBootTest ({ server.port: 0 "," eureka.client.enabled: false "})' –

+0

'@ SpringBootTest' доступен с Spring Boot 1.4.0.M2 – nerdherd

11

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

applications.properties:

eureka.client.enabled=false

application.yml:

eureka: client: enabled: false

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

+1

Это должен быть принятый ответ на мой взгляд. Идеально подходит для ленивых и умных разработчиков. –

+0

Спасибо, Виктор, я ценю это! –

+0

Если вы используете пружину с профилями, поставьте ее в application-test.yml, затем добавьте комментарий к вашему тесту @ActiveProfiles («test») –

Смежные вопросы