首页 > 解决方案 > 为什么我会从 Java 中的 Mock Server 获得 Assert Not Equal?

问题描述

我必须创建一个模拟服务器期望来检查传入请求是否等于模拟请求。我的问题是 Json,它与我提供的期望相同,但我得到了

java.lang.AssertionError: 
Expected :401
Actual   :404

期待的Json -

String rechargeRequest = "{\n" +
            "   \"RechargeRequest\":{\n" +
            "      \"RechargeSerialNo\":\"2645\",\n" +
            "      \"RechargeChannelID\":\"3\",\n" +
            "      \"RechargeObj\":{\n" +
            "         \"SubAccessCode\":{\n" +
            "            \"PrimaryIdentity\":\"763500001\"\n" +
            "         }\n" +
            "      },\n" +
            "      \"RechargeInfo\":{\n" +
            "         \"CashPayment\":[\n" +
            "            {\n" +
            "               \"Amount\":\"30\"\n" +
            "            }\n" +
            "         ]\n" +
            "      }\n" +
            "   }\n" +
            "}\n";

我的期望是——

 private  void createdExpectation( ){
   new MockServerClient("127.0.0.1", 1081)
           .when(
                   request()
                           .withMethod("POST")
                           .withPath("/cbs/billingmgt/v1.0/Account/Recharge")
                           .withHeader("\"Content-type\", \"application/json\"")
                           .withBody(rechargeRequest))
           .respond(
                   response()
                           .withStatusCode(401)
                           .withBody("Done")
           );
}

我的 HttpResponse 类创建请求 -

private org.apache.http.HttpResponse hitTheServerWithPostRequest(String jsonString) {
    String url = "http://127.0.0.1:1081/cbs/billingmgt/v1.0/Account/Recharge";
    CloseableHttpClient client = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost(url);
    post.setHeader("Content-type", "application/json");
    org.apache.http.HttpResponse response=null;

    try {
        StringEntity stringEntity = new StringEntity(jsonString);
        post.getRequestLine();
        post.setEntity(stringEntity);
        response=client.execute(post);

    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return response;
}

我的测试方法 - 我创建示例 Json 以传递给期望

@Test
public  void test() throws JsonProcessingException {
    JsonRechargeRequest jsonRechargeRequest = new JsonRechargeRequest();
    RechargeRequest request = new RechargeRequest();
    request.setRechargeSerialNo("2645");
    request.setRechargeChannelID("3");
    RechargeObj rechargeObj = new RechargeObj();
    SubAccessCode subAccessCode = new SubAccessCode();
    subAccessCode.setPrimaryIdentity("763500001");
    rechargeObj.setSubAccessCode(subAccessCode);
    RechargeInfo rechargeInfo = new RechargeInfo();
    CashPayment cashPayment = new CashPayment();
    cashPayment.setAmount("30");
    rechargeInfo.setCashPayments(Collections.singletonList(cashPayment));
    request.setRechargeObj(rechargeObj);
    request.setRechargeInfo(rechargeInfo);
    jsonRechargeRequest.setRechargeRequest(request);

    ObjectMapper mapper = new ObjectMapper();
    String jsonString = mapper.writeValueAsString(jsonRechargeRequest);

    //Calling Expectation
    createdExpectation();
    org.apache.http.HttpResponse response = hitTheServerWithPostRequest(jsonString);
    assertEquals(401, response.getStatusLine().getStatusCode());
}

在这个Test方法中assertEquals Expect 401但是从hitTheServerWithPostRequest方法的响应响应状态为404。它是怎么发生的?

谢谢,大顺。

标签: javajunitmockingassertionmockserver

解决方案


鉴于缺乏任何答案......这里有一个猜测:

createdExpectation( )方法中,而不是

.withHeader("\"Content-type\", \"application/json\"")

它一定要是

.withHeader("Content-type", "application/json")

或者

.withHeader(header("Content-type", "application/json"))

推荐阅读