15

我已经将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>")));

       }

但是每当我点击以下网址时

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>

有人可以让我知道我做错了什么吗?

4

4 回答 4

25

根据Stubbing - Wiremock(“wiremockserver urlequalto”上谷歌中的第一个):

注意:您必须使用urlPathEqualToorurlPathMatching来指定路径,因为urlEqualTourlMatching将尝试匹配整个请求 URL,包括查询参数。

于 2016-03-05T20:47:11.043 回答
2

对于任何试图将 Wiremock 添加到 Android 应用程序并偶然发现这个问题的人:

如果你在网络调用之后运行你的模拟,它不会工作。这似乎很明显,但我被绊倒了。

当您运行 Espresso 测试时,默认情况下,活动测试规则会立即启动活动,因此活动会在我的模拟代码实际运行之前触发并提取其配置数据。我看到了与 OP 相同的错误。

修复方法是让您的活动测试规则最初不启动,然后模拟您的数据,并在您完成所有这些操作后告诉活动开始。

于 2019-03-25T15:55:03.957 回答
1

只是添加一个不同的场景,在我的情况下导致完全相同的问题:

确保没有其他东西在使用 Wiremock 端口

我有一个在后台运行的 Docker 容器,它映射到我的 Wiremock 使用的同一端口。这很容易被忽略,因为 Wiremock 在运行我的测试时没有抛出任何绑定错误(或任何其他类型的错误)——它正常启动,我的测试请求只会返回 404。

于 2020-11-27T08:36:01.640 回答
0

我通常使用的一个是urlPathMatching在导入时可以得到:

import static com.github.tomakehurst.wiremock.client.WireMock.*;

因此,在您的测试中,您将拥有对外部 api 进行休息调用service的类,该调用将使用 wiremock 进行模拟。MyService"/orders/v1/ordersearch/"stubFor

然后mockServer.verify,mockServer 在服务时访问了外部 api service.sendToExternalUrl()

  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())));
  }
于 2019-10-25T18:35:06.877 回答