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?
7
A
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()));
}
}
}
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
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 –
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