Я использую 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.
Большая часть этого вопроса - это код, который в основном оптимизирован для stackoverflow;) В любом случае, я попытаюсь реорганизовать этот вопрос, чтобы выделить идею проблемы. Спасибо!
@Krzysiek кажется странным. Я бы попытался отладить выполнение кода, который создает этот путь к файлу, и посмотреть, где он идет не так. Также это может быть ошибка - вы можете проверить здесь github.com/spring-cloud/spring-cloud-contract, есть ли для него тест (я не смог найти), а если нет, вы можете добавить еще один, чтобы попытаться доказать, является ли это ошибкой.
@yishaiz Как правило, у меня не было достаточно времени, чтобы тщательно его проверить, но, вероятно, это будет единственный способ решить эту проблему. На данный момент я только что изменил порядок и поместил все ответы в один каталог. Не чистый, но рабочий способ ... какое-то время ...;)




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