WireMock использует неправильный каталог __files для конфигурации сопоставлений нескольких каталогов

Я использую Spring Boot с зависимостями spring-cloud-contract-wiremock и com.github.tomakehurst.wiremock. Мои определения wiremock хранятся в файлах json. Как это:

directoryA / mappings / detail-mapping-123.json:

{
  "request" : {
    "urlPath" : "/detail/123",
    "method" : "GET"
  },
  "response" : {
    "status" : 200,
    "bodyFileName" : "detail.json",
    "headers" : {
      "Content-Type" : "application/json;charset=UTF-8"
    }
  }
}

directoryA / __ files / detail.json:

{
  "id": "123",
  "name": "name-123"
}

directoryB / mappings / поиск-отображение-123.json:

{
  "request" : {
    "urlPath" : "/service/usa/search",
    "queryParameters" : {
      "query": {
        "equalTo": "123"
      }
    },
    "method" : "GET"
  },
  "response" : {
    "status" : 200,
    "bodyFileName" : "search-123.json",
    "headers" : {
      "Content-Type" : "application/json;charset=UTF-8"
    }
  }
}

каталогB / __ files / search-123.json:

{
  "count": 1,
  "units": [
    {
      "name": "A123"
    }
  ]
}

У меня есть стандартный тестовый класс JUnit, который помечен:

@AutoConfigureWireMock(stubs = {"classpath:/directoryA/mappings", "classpath:/directoryB/mappings"},
        files = {"classpath:/directoryA", "classpath:/directoryB"},
        port = 18081)

Похоже, что эти файлы правильно распознаются Wiremock, и все определения анализируются правильно, но проблема заключается в назначении правильного файла тела для запроса: Когда приложение пытается выполнить запрос:

GET http://localhost:18081/service/usa/search?query=123 HTTP/1.1

Тогда я получаю сообщение об ошибке:

java.lang.RuntimeException: java.io.FileNotFoundException: /home/my-project-dir/target/test-classes/directoryA/__files/search-123.json (Not found such file or directory) 

Итак ... Проблема в том, что поиск по проводной схеме для файла, определенного в части определения сопоставления bodyFileName (directoryB / mappings / search-mapping-123.json) в каталоге directoryA вместо directoryB, откуда был использован файл сопоставления. Если будет использоваться

/home/my-project-dir/target/test-classes/directoryB/__files/search-123.json

тогда все должно работать нормально ...

У кого-нибудь была подобная проблема? Я не уверен, ошибка ли это в моей конфигурации или в библиотеке Wiremock.

без ответа? @Krzysiek, вопрос слишком длинный, я предлагаю закрыть его и сделать его короче

Adam Siemion 18.09.2018 22:09

Большая часть этого вопроса - это код, который в основном оптимизирован для stackoverflow;) В любом случае, я попытаюсь реорганизовать этот вопрос, чтобы выделить идею проблемы. Спасибо!

Krzysiek 19.09.2018 15:56

@Krzysiek кажется странным. Я бы попытался отладить выполнение кода, который создает этот путь к файлу, и посмотреть, где он идет не так. Также это может быть ошибка - вы можете проверить здесь github.com/spring-cloud/spring-cloud-contract, есть ли для него тест (я не смог найти), а если нет, вы можете добавить еще один, чтобы попытаться доказать, является ли это ошибкой.

yishaiz 26.09.2018 10:07

@yishaiz Как правило, у меня не было достаточно времени, чтобы тщательно его проверить, но, вероятно, это будет единственный способ решить эту проблему. На данный момент я только что изменил порядок и поместил все ответы в один каталог. Не чистый, но рабочий способ ... какое-то время ...;)

Krzysiek 26.09.2018 13:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
4
3 461
1

Ответы 1

Попробуйте исключить аргументы «заглушки» и «файлы» из аннотации @AutoConfigureWireMock и поместить свои сопоставления / файлы в src / test / resources, по умолчанию Wiremock получает из этого пути

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