Я использую 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 / search-mapping-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"
}
}
}
directoryB / __ 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)
Итак ... Проблема в том, что Wiremockпоиск файла, определенного в bodyFileName
части определения сопоставления (directoryB / mappings / search-mapping-123.json) в каталоге directoryA вместо directoryB , из которого использовался файл сопоставления.Если будет использоваться
/home/my-project-dir/target/test-classes/directoryB/__files/search-123.json
, то все должно работать нормально ...
У кого-нибудь была подобная проблема?Я не уверен, если это ошибка в моей конфигурации или в библиотеке Wiremock.