私は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>
誰かが私が間違っていることを教えてもらえますか?
Stubbing --Wiremock ( "wiremockserver urlequalto"でのGoogleの1番目)によると:
注:パスを指定するには、
urlPathEqualTo
またはurlPathMatching
を使用する必要があります。これは、urlEqualTo
またはurlMatching
がクエリパラメータを含むリクエストURL全体と一致しようとするためです。 。
WiremockをAndroidアプリに追加しようとしていて、この質問に遭遇した場合:
モックを実行するとafterネットワーク呼び出しが行われた場合、それは機能しません。これは当たり前のように思えるかもしれませんが、私はそれにつまずきました。
Espressoテストを実行すると、デフォルトでは、アクティビティテストルールがアクティビティをすぐに起動するため、モックコードが実際に実行される前に、アクティビティが起動して構成データをプルしていました。 OPと同じエラーが発生しました。
修正は、アクティビティテストルールを最初に起動しないようにし、データを模擬し、すべてを実行したらアクティビティを開始するように指示することです。
私が通常使用するのは、インポート時に取得できるurlPathMatching
です。
_import static com.github.tomakehurst.wiremock.client.WireMock.*;
_
したがって、テストでは、クラスservice
のMyService
を使用して、外部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())));
}
_