WireMock 使用错误的 __files 目录进行多目录映射配置

Krz*_*iek 5 java junit wiremock spring-cloud spring-cloud-contract

我正在使用 Spring Bootspring-cloud-contract-wiremockcom.github.tomakehurst.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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

directoryA/__files/detail.json

{
  "id": "123",
  "name": "name-123"
}
Run Code Online (Sandbox Code Playgroud)

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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

directoryB/__files/search-123.json

{
  "count": 1,
  "units": [
    {
      "name": "A123"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我有标准的 JUnit 测试类,其注释为:

@AutoConfigureWireMock(stubs = {"classpath:/directoryA/mappings", "classpath:/directoryB/mappings"},
        files = {"classpath:/directoryA", "classpath:/directoryB"},
        port = 18081)
Run Code Online (Sandbox Code Playgroud)

这个文件看起来被wiremock正确识别并且所有定义都被正确解析,但问题在于为请求分配正确的主体文件:当应用程序尝试执行请求时:

GET http://localhost:18081/service/usa/search?query=123 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

然后我收到错误:

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

所以......问题是bodyFileName在目录directoryA 而不是 directoryB中使用映射文件的映射定义(directoryB/mappings/search-mapping-123.json)部分定义的文件的wiremock搜索。如果会用到

/home/my-project-dir/target/test-classes/directoryB/__files/search-123.json
Run Code Online (Sandbox Code Playgroud)

那么一切都应该正常工作......

有人有类似的问题吗?我不确定这是否是我的配置或wiremock 库中的错误。

小智 1

尝试从注释 @AutoConfigureWireMock 中排除“stubs”和“files”参数,并将映射/文件放在 src/test/resources 中,wiremock 默认从这些路径获取