2017-04-10 5 views
2

ApplicationReadyEvent에서 발생한 HTTP 호출을 차단하기 위해 Wiremock을 사용하려고합니다. 문제는이 호출이 Wiremock 규칙이 적용되기 전에 이루어 졌다는 것입니다. 따라서이 API는 조롱받지 않습니다.ApplicationReadyEvent에서 트리거 된 HTTP 호출을 모의하는 방법

는 스터 빙 실제로 서블릿 컨테이너가 준비되면 트리거 @Before 단계로 구성되어

예를

public class OnApplicationReadyListener implements ApplicationListener<ApplicationReadyEvent>{ 

@Override 
public void onApplicationEvent(ApplicationReadyEvent event) { 
    // in this pathe is being send a request 
    consulHealthCheckService.register(); 
} 

} 다음을 참조하십시오. 그래서 실제로 - 는 HTTP 호출이

@RunWith(SpringRunner.class) 
    @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = ConsulApplication.class) 
    public class ConsulApplicationTest { 

     @Rule 
     public WireMockRule wireMockRule = new WireMockRule(Agent.DEFAULT_PORT); 

     @Before 
     public void setup(){ 
      // is being executed after the http call was fired 
stubFor(get(anyUrl()).willReturn(aResponse().withStatus(HttpStatus.OK.value()))); 
      stubFor(put(urlEqualTo("/agent/service/register")) 
        .willReturn(aResponse() 
          .withStatus(HttpStatus.OK.value()) 
          .withHeader("Content-Type", APPLICATION_JSON_VALUE) 
          )); 
     } 

     @Test 
     public void shouldRegisterServiceOnApplicationStartup(){ 

      verify(putRequestedFor(urlEqualTo("/agent/service/register"))); 


     } 
    } 

주어진 HTTP 호출을 스텁하는 방법을 어떤 방법이 있나요 해고 후? 참고 : 실제로 전화를 트리거하는 서비스 코드를 조롱 할 수 없습니다.

답변

0

WireMockRule을 사용하는 대신 포트에서 정적으로 WireMockServer을 시작하고이 테스트 클래스가 완전히 초기화되기 전에 매핑을로드 할 수 있습니다. 이 방법으로 문제가 해결되면 @AfterClass 방법으로 서버를 종료 할 수 있습니다.

테스트 클래스를 초기화하기 전에 테스트를 요청한 경우 요청이 언제 어디서 발생했는지 확인하고 테스트가 시작되기 전에 테스트 할 수있는 다른 방법을 찾아야합니다. 테스트 클래스도 초기화된다.