2016-09-19 17 views
7

Feign istemcisini kullanan bir sınıfa sahibim. Daha önce Mockito'yu kullandım ve Feign istemcisindeki yöntem çağrılarının her biri için saklı bir yanıt verdim. Şimdi WireMock'u kullanmak istiyorum, böylece kodumun farklı türde yanıt kodlarını doğru bir şekilde ele aldığını görebiliyorum. Bunu yapmayı nasıl yaparım? Feign istemcimi sınamaya nasıl bağlayacağımı ve application.yml dosyamda kurduğum URL yerine Wiremock'u kullanacak şekilde nasıl bağlayacağımı anlayamıyorum. Herhangi bir işaretçi çok takdir edilecektir.Bir Spring Boot uygulamasında TelMock bir Feign istemcisinde nasıl kullanılır?

cevap

3

Belki (ilkbahar-dinlenme-docs kullanarak) Bu üretmek ve bahar mvc testlerde wiremock parçacıkları yayımlamak yardımcı bu proje https://github.com/ePages-de/restdocs-wiremock

bakmak istiyorum.

Son olarak, bu parçacıkları testinizde bu kaydedilmiş istekleri sunmak için bir wiremock sunucusu başlatmak için kullanabilirsiniz.

Bu tümleşik çözümden uzaklaşırsanız, sınama sırasında wiremock sunucunuzu açmak için wiremock JUnit kuralını kullanabilirsiniz. İşte

http://wiremock.org/docs/junit-rule/ Bu bağlantı noktasını kullanmak için dinamik wiremock portu kullanır ve kurdele yapılandıran bir örnek testi edilmektedir: (Eğer feign ve kurdele kullanıyorsunuz?)

@WebAppConfiguration 
    @RunWith(SpringRunner.class) 
    @SpringBootTest() 
    @ActiveProfiles({"test","wiremock"}) 
    public class ServiceClientIntegrationTest { 

     @Autowired //this is the FeignClient service interface 
     public ServiceClient serviceClient; 

     @ClassRule 
     public static WireMockRule WIREMOCK = new WireMockRule(
       wireMockConfig().fileSource(new ClasspathFileSource("path/to/wiremock/snipptes")).dynamicPort()); 

     @Test 
     public void createSome() { 
      ServiceClient.Some t = serviceClient.someOperation(new Some("some")); 
      assertTrue(t.getId() > 0); 
     } 

//using dynamic ports requires to configure the ribbon server list accordingly 
     @Profile("wiremock") 
     @Configuration 
     public static class TestConfiguration { 

      @Bean 
      public ServerList<Server> ribbonServerList() { 
       return new StaticServerList<>(new Server("localhost", WIREMOCK.port())); 
      } 
     } 
    } 
+0

yanıtlayan için teşekkür ederiz! Ben kurdele kullanmıyorum - sadece feign. '@ FeignClient' kullanarak' url = externalApiUrl' kullanıyorum. Bunun yerine wiremock url'yi nasıl enjekte edebilirim? – L42

+0

wiremock aslında bir sunucu çalıştırıyor, bu yüzden FeignClient'in 'localhost: WIREMOCK.port''a işaret ettiğinden emin olun. URL'nin bir yapılandırma özelliğine işaret edip etmediğinden emin değilim. Bahar ifadelerini desteklemiyor gibi görünüyor. Dinamik bir feign url'ye sahip benzer bir soruda, kabul edilmiş cevap, yukarıdaki test tarafından kullanılan şerit ve konfigürasyon mekanizmasının kullanılmasını önermektedir. http://stackoverflow.com/a/29278126/5371736 –

+0

Yay sürümleriyle uğraştığımız bir çok şeyden sonra, sanırım daha yakınım. Ancak, otomatikleştirilmiş feign istemcim "null" olarak ayarlandı. Bunun neden olabileceğini biliyor musun? Geçerli planım, wiremock URL'sini @SpringBootTest'te bir özellik olarak ayarlamaya çalışmaktır, böylece feign istemcisi (boş değilken) wiremock'a gider. – L42

İlgili konular