2016-09-19 7 views
7

필자는 Feign 클라이언트를 사용하는 클래스가 있습니다. 이전에는 Mockito를 사용하고 Feign 클라이언트에서 각 메서드 호출에 대해 저장된 응답을 제공했습니다. 이제 WireMock을 사용하여 코드가 여러 종류의 응답 코드를 올바르게 처리 할 수 ​​있도록합니다. 어떻게해야합니까? 테스트에서 내 Feign 클라이언트를 연결하는 방법을 알아낼 수 없으므로 application.yml 파일에 설정 한 URL 대신 Wiremock을 사용합니다. 모든 포인터 크게 감사하겠습니다.Spring Boot 애플리케이션에서 WireMock을 Feign 클라이언트에 사용하는 방법은 무엇입니까?

답변

3

은 아마 당신은 (봄 - 휴식 - 워드 프로세서를 사용하여) 이렇게하면 생성하고 스프링 MVC 테스트에서 wiremock 조각을 게시하는 데 도움이 프로젝트 https://github.com/ePages-de/restdocs-wiremock

보고 싶다.

마지막으로 이러한 스 니펫을 사용하여 테스트에서 이러한 기록 된 요청을 제공하기 위해 와이어 록 서버를 시작할 수 있습니다.

이 통합 솔루션에서 벗어나면 테스트 중에 wiremock JUnit 규칙을 사용하여 와이어 록 서버를 가동 할 수 있습니다. 다음

http://wiremock.org/docs/junit-rule/이 포트를 사용하는 동적 wiremock 포트를 사용하고 리본을 구성하는 샘플 테스트한다 : (당신은 체하다와 리본을 사용하고 있습니까?)

@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

이 응답 해 주셔서 감사합니다! 나는 리본을 사용하지 않고있다. 나는'url = externalApiUrl'과 함께'@ FeignClient'를 사용하고 있습니다. 대신 어떻게 wiremock URL을 삽입 할 수 있습니까? – L42

+0

wiremock은 실제로 서버를 실행하므로 FeignClient가'localhost : WIREMOCK.port'를 가리키고 있는지 확인하십시오. URL이 구성 등록 정보를 가리킬 수 있는지 확실하지 않습니다. 그것은 봄 표현을 지원하는 것 같지 않습니다. 비슷한 질문에 대답을 동적 대답을 받아 들여진 대답은 위의 테스트에서 사용 된 리본 및 구성 메커니즘을 사용하는 것이 좋습니다. http://stackoverflow.com/a/29278126/5371736 –

+0

봄 버전으로 많은 어려움을 겪은 후에 나는 더 가까이 있다고 생각합니다. 그러나, 필자의 autowired 클라이언트는'null '로 설정된다. 왜 그럴 수 있는지 아십니까? 나의 현재 계획은 wiremock URL을 @SpringBootTest의 속성으로 설정하려고 시도하기 때문에, null이 아닌 경우 클라이언트가 wiremock으로 이동합니다. – L42