Сбой теста случайной строки Java Wiremock - PullRequest
0 голосов
/ 04 января 2019

Я генерирую некоторый JSON, который я использую для проверки Wiremock.Однако теперь мне нужно добавить случайно сгенерированную строку в JSON, которая, очевидно, меняется при каждом запуске моего теста.Это приводит к тому, что утверждение не выполняется.У кого-нибудь есть идеи, как мне обойти эту проблему?

Json:

"data": {
    "case": {
      "user": {
        "name": {
          "title": "Mr",
          "firstName": "John",
          "lastName": "Smith"
        },
        "address": { }
      }
    },
    "subscriptions": {
      "userSubscription": {
        "randomNumber": "{{I am a random string so fail}}",
        "email": null,
        "mobile": null
      },
      "supporterSubscription" : null
   }
}

Тест:

@Test
public void should_handle_callback()
    throws Exception {

    submitStub();

    HttpEntity<String> request = new HttpEntity<>("string");

    // fails
    ResponseEntity<CallbackResponse> result =
        this.restTemplate.postForEntity(baseUrl, request, CallbackResponse.class);
}

private static String loadJson(String fileName) throws IOException {
    URL url = getResource(fileName);
    return Resources.toString(url, Charsets.toCharset("UTF-8"));
}

private void submitStub() throws Exception {

    ccdServer.stubFor(post(concat(SUBMIT_EVENT_URL))
            .withHeader(AUTHORIZATION, equalTo(USER_AUTH_TOKEN))
            .withHeader(SERVICE_AUTHORIZATION_HEADER_KEY, equalTo(SERVICE_AUTH_TOKEN))
            .withHeader(CONTENT_TYPE, equalTo(MediaType.APPLICATION_JSON_UTF8_VALUE))
            .withRequestBody(equalToJson(createCaseRequest))
            .willReturn(aResponse()
                .withHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE)
                .withStatus(200)
                .withBody(loadJson("testjson.json"))));
}

1 Ответ

0 голосов
/ 08 января 2019

Я не верю, что есть какие-либо «готовые» способы утверждать против подстановочных знаков в теле запроса. Я сталкивался с подобной проблемой в прошлом и использовал запросы критериев в прошлом, которые работают достаточно хорошо.

http://wiremock.org/docs/verifying/

Взгляните на раздел «Запросы критериев» на этой странице, где показан и пример того, как напрямую запросить журнал запросов.

Код должен выглядеть примерно так:

List<LoggedRequest> requests = findAll(postRequestedFor(urlMatching("/api/.*")));

После того, как вы вернетесь к этому списку запросов, вы можете просмотреть результаты, чтобы найти, содержит ли один из тел LoggedRequest нужный вам json.

Хорошей библиотекой для проверки соответствия JSON с подстановочными знаками является JSON-Unit, который позволяет заполнять поля, которые автоматически генерируются с помощью "$ {json-unit.ignore}".

https://github.com/lukas-krecan/JsonUnit

Ваше утверждение может выглядеть примерно так:

assertThatJson(requests.get(0).getBodyAsString())
  .isEqualTo("{\"id\":\"${json-unit.ignore}\",\"name\":\"bob\"}");
...