【发布时间】:2018-07-27 23:33:36
【问题描述】:
我们的 REST API 是通过使用 Spring Restdocs 以标准方式(通过mockMvc.perform(...)...andDo(document().fieldWithPath(...)) 语句)的一组测试记录的。由于字段具有类型和强制/可选标志,我想重用此信息以用于响应正文验证的目的在生产代码中。
我将 Spring Restdocs 移动到 compile Maven 范围,并将 sn-p 创建移动到生产代码,在 src/main 代码中记录测试和响应主体拦截器都可以看到它(后者只调用 ResponseFieldsSnippet.createModel 方法) .一切正常,除了以下陷阱:空的对象集合看起来无效,因为框架试图将对象字段的 fieldWithPath 规则与不存在的数据相匹配。
例如,假设 cat 的 JSON 被描述为 fieldWithPath("kittens[]"), fieldWithPath("kittens[].name"),实际的 JSON {"kittens":[]} 似乎无效,因为不满足后一个描述符。这不会发生在测试样本中,其中数据是为了最大限度地提高文档效益而捏造的,但对于真实案例来说却是个问题。
基于这一观察,我倾向于认为重用 Restdocs DSL 进行验证是一个坏主意。在切换到重量级解决方案 á la JSON 模式之前,我想问一下:Restdocs 是否提供了某种方式来将字段描述符表示为树而不是规则列表?例如上面的fieldWithPath("kittens[]", subfieldWithPath("name"))。 (无论我的情况如何滥用,我认为它可能很有用。)
我浏览并详细说明了文档中看起来很有希望但 AFAIK 实际上并未涵盖这种情况的示例,即:subsectionWithPath(跳过子树)、underPath(仅关注子树)或ResponseFieldsSnippet.andWithPrefix(仅用于创建列表的快捷方式但仍然列出不树)。
感谢您的意见!
【问题讨论】:
标签: java json validation spring-restdocs