web-dev-qa-db-ja.com

スタブURLに対して404を返すWiremock

私はwireMockサーバーを次のように定義しました:-

    private WireMockServer wireMockServer;
        @Before
        public void preSetup() throws Exception {
          wireMockServer = new WireMockServer(56789);
          wireMockServer.start();
        };

        @Override
        @After
        public void tearDown() {
          wireMockServer.stop();
        }

        @Test
        public void testSendMatchingMessage() throws Exception {

          wireMockServer.stubFor(get(urlEqualTo("/orders/v1/ordersearch/"))
            .willReturn(aResponse().withStatus(200).withBody("<response>Some content</response>")));

       }

しかし、私が以下のようなURLを打つたびに

http://0.0.0.0:56789/orders/v1/ordersearch/?field=address%2Cfinance%2Cshipping&limit=10&page=2&q=createdFrom.gt%7E2016-01-11T10%3A12%3A13

以下のエラーが発生します:-

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
    <title>Error 404 NOT_FOUND</title>
    </head>
    <body><h2>HTTP ERROR 404</h2>
    <p>Problem accessing /__files/orders/v1/ordersearch/. Reason:
    <pre>    NOT_FOUND</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>                                                
    <br/>                                                
    <br/>                                                
    <br/>                                                
    <br/>                                                
    <br/>                                                
    <br/>                                                
    <br/>                                                
    <br/>     
    </body>
    </html>

誰かが私が間違っていることを教えてもらえますか?

13
tuk

Stubbing --Wiremock ( "wiremockserver urlequalto"でのGoogleの1番目)によると:

注:パスを指定するには、urlPathEqualToまたはurlPathMatchingを使用する必要があります。これは、urlEqualToまたはurlMatchingがクエリパラメータを含むリクエストURL全体と一致しようとするためです。 。

20
ivan_pozdeev

WiremockをAndroidアプリに追加しようとしていて、この質問に遭遇した場合:

モックを実行するとafterネットワーク呼び出しが行われた場合、それは機能しません。これは当たり前のように思えるかもしれませんが、私はそれにつまずきました。

Espressoテストを実行すると、デフォルトでは、アクティビティテストルールがアクティビティをすぐに起動するため、モックコードが実際に実行される前に、アクティビティが起動して構成データをプルしていました。 OPと同じエラーが発生しました。

修正は、アクティビティテストルールを最初に起動しないようにし、データを模擬し、すべてを実行したらアクティビティを開始するように指示することです。

2
AdamMc331

私が通常使用するのは、インポート時に取得できるurlPathMatchingです。

_import static com.github.tomakehurst.wiremock.client.WireMock.*;
_

したがって、テストでは、クラスserviceMyServiceを使用して、外部API _"/orders/v1/ordersearch/"_にREST呼び出しを行います。これは、wiremock stubForでモックされる呼び出しです。

次に、mockServerがサービスservice.sendToExternalUrl()のときに外部APIを取得した_mockServer.verify_を取得します。

_  private WireMockServer mockServer;
  private MyService service;

  @Before
  public void preSetup() {
    mockServer = new WireMockServer(56789);
    mockServer.start();
  }

  @After
  public void tearDown() {
    mockServer.stop();
  }

  @Test
  public void testSendMatchingMessage() {
    UrlPattern externalUrl = urlPathMatching("/orders/v1/ordersearch/");
    stubFor(get(externalUrl).willReturn(aResponse().withStatus(200)));

    service.sendToExternalUrl();

    mockServer.verify(1, getRequestedFor(externalUrl)
        .withRequestBody(containing(new JSONObject().put("orders", "results").toString())));
  }
_
0
Sylhare