Ошибка теста случайной строки Java Wiremock

Я генерирую 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"))));
}
randomNumber генерирует с помощью вашего кода? не могли бы вы издеваться над этим, чтобы сгенерировать псевдослучайную строку?
BSeitkazin 04.01.2019 11:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
799
1

Ответы 1

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

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\"}");

Другие вопросы по теме