2017-04-10 12 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メソッドでサーバーがシャットダウンされるようにすることができます。

テストクラスが初期化される前に要求を出している場合は、リクエストがいつどこで行われたのかを把握し、アサーションをテストする別の方法を見つける必要がありますテストクラスも初期化されます。

関連する問題