【问题标题】:Not able to verify requests made to WireMock Server: "No Requests Exactly Match"无法验证向 WireMock 服务器发出的请求:“没有完全匹配的请求”
【发布时间】:2018-04-25 10:17:25
【问题描述】:

我正在尝试验证我向 WireMock 服务器发出的请求,但我收到一条错误消息,指出请求不完全匹配。唯一不匹配的位是“Content-Type: plain\text”位。

请看下面我的代码:

public class WeatherApplicationTest {


    @Rule
    public  WireMockRule wireMockRule = new WireMockRule(8080);
  //  public   WireMockServer wireMockServer = new WireMockServer(8090); //No-args constructor will start on port 8080, no HTTPS



    @BeforeClass
    public  static void setUpClass() {
        //wireMockServer.start();
    }

    @AfterClass
    public static  void tearDownClass() {
        //wireMockServer.stop();

    }


    @Test
    public void statusMessage() throws IOException{

                wireMockRule.start();


         stubFor(get(urlEqualTo("/user/1"))
        .willReturn(aResponse()
        .withStatus(200)
        .withStatusMessage("Everything is fine")
        .withHeader("Content-Type","text/plain")));

       HttpClient client = new DefaultHttpClient();
       HttpClient client2 = new DefaultHttpClient();

        HttpGet request = new HttpGet("http://localhost:" + wireMockRule.port() + 
        "/user/1");
       HttpResponse response = client.execute(request);

       HttpGet request2 = new HttpGet("http://localhost:" + wireMockRule.port() + 
        "/some/else");
       HttpResponse response2 = client2.execute(request2);

        assertThat(response.getStatusLine().getStatusCode(), is(200));
        assertThat(response2.getStatusLine().getStatusCode(), is(404));


        verify(getRequestedFor(urlEqualTo("/user/1"))
        .withHeader("Content-Type", equalTo("text/plain")));


        wireMockRule.stop();



}
}

这是我收到的错误消息:

没有完全匹配的请求。最相似的请求是:预期:

内容类型:文本/纯文本

但是:

【问题讨论】:

  • 有人有什么建议吗?
  • 不要打电话给wireMockRule.start() or .stop(),这是规则为你做的。

标签: java wiremock


【解决方案1】:

问题是您正在尝试验证 request 是否具有 Content-Type: text/plain 标头,而您仅将其作为响应标头发送。

删除.withHeader("Content-Type", equalTo("text/plain")),它应该可以工作。

【讨论】:

    【解决方案2】:

    将标头设置为您的两个 HttpGet 请求

     request.setHeader(HttpHeaders.CONTENT_TYPE, "text/plain");
    

    它应该可以正常工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多