Проверка MockServer с помощью нескольких сопоставителей тел

#java #unit-testing #matcher #verify #mockserver

Вопрос:

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

Однако при нескольких withBody() вызовах verify метод проходит, если проходит один или несколько сопоставителей. Как реализовать логическое И вместо ИЛИ?

 mockServer.verify(
    request()
        .withPath(url)
        .withMethod("POST")
        .withBody(
            json(
                "{"firstName": "foo","lastName": "bar"}",
                MatchType.ONLY_MATCHING_FIELDS))
        .withBody(
            // Need subString because we don't know the time and only want to validate the date
            subString(""order_date_time": "2021-04-15")));
 

Ответ №1:

Для выполнения логического И по нескольким критериям сопоставления тел необходимо вызвать verify() метод несколько раз:

 private void verifyOrderPlaced() {
  verifyName();
  verifyOrderDate();
}

private void verifyName() {
  mockServer.verify(
      request()
          .withPath(url)
          .withMethod("POST")
          .withBody(
              json(
                  "{"firstName": "foo","lastName": "bar"}",
                  MatchType.ONLY_MATCHING_FIELDS)));
}

private void verifyOrderDate() {
  mockServer.verify(
      request()
          .withPath(url)
          .withMethod("POST")
          .withBody(
              subString(""order_date_time": "2021-04-15")));
}