Spring REST Docs文档(二)中如何实现详细测试?

2026-05-26 03:271阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1390个文字,预计阅读时间需要6分钟。

Spring REST Docs文档(二)中如何实现详细测试?

自定义请求和响应记录+在特定情况下,您可能不想完全按照发送或接收的方式记录请求或响应。Spring REST Docs 提供了多种预处理工具,可用于在记录请求或响应之前对其进行处理。

自定义请求和响应

在某些情况下,您可能不希望完全按照发送的方式记录请求或完全按照收到的响应记录响应。 Spring REST Docs 提供了许多预处理器,可用于在记录请求或响应之前对其进行修改。

预处理是通过使用 或 . 您可以使用 上的 static 和 方法来获取实例。 以下示例演示如何执行此操作:​​document​​​​OperationRequestPreprocessor​​​​OperationResponsePreprocessor​​​​preprocessRequest​​​​preprocessResponse​​​​Preprocessors​​

this.mockMvc.perform(get("/")).andExpect(status().isOk()) .andDo(document("index", preprocessRequest(modifyHeaders().remove("Foo")), preprocessResponse(prettyPrint())));

应用请求预处理器,删除名为 的标头。​​Foo​​

应用一个响应预处理器,漂亮地打印其内容。

或者,您可能希望对每个测试应用相同的预处理器。 为此,可以在方法中使用 API 来配置预处理器。 例如,要从所有请求中删除标头并漂亮地打印所有响应,您可以执行以下操作之一(取决于您的测试环境):​​RestDocumentationConfigurer​​​​@Before​​​​Foo​​

private MockMvc mockMvc;@Beforepublic void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.restDocumentation).operationPreprocessors() .withRequestDefaults(modifyHeaders().remove("Foo")) .withResponseDefaults(prettyPrint())) .build();}

应用请求预处理器,删除名为 的标头。​​Foo​​

应用一个响应预处理器,漂亮地打印其内容。

然后,在每个测试中,您可以执行特定于该测试的任何配置。 以下示例演示如何执行此操作:

this.mockMvc.perform(get("/")).andExpect(status().isOk()) .andDo(document("index", links(linkWithRel("self").description("Canonical self link"))));

各种内置预处理器(包括上图所示的预处理器)可通过 上的静态方法获得。 有关更多详细信息,请参见下文。​​Preprocessors​​

预处理器

漂亮的印刷

​​prettyPrint​​on 设置请求或响应内容的格式,使其更易于阅读。​​Preprocessors​​

屏蔽链接

如果要记录基于超媒体的 API,则可能需要鼓励客户端使用链接而不是使用硬编码 URI 来导航 API。 一种方法是在文档中限制 URI 的使用。 on 将响应中任何链接的 替换为 。 如果需要,还可以指定其他替换。​​maskLinks​​​​Preprocessors​​​​href​​​​…​​

修改标头

可以使用 on 添加、设置和删除请求或响应标头。​​modifyHeaders​​​​Preprocessors​​

替换模式

​​replacePattern​​on 提供用于替换请求或响应中内容的通用机制。 与正则表达式匹配的任何匹配项都将被替换。​​Preprocessors​​

修改 URI

如果您使用 MockMvc 或未绑定到服务器的 WebTestClient,则应通过更改配置来自定义 URI。

可以使用 on 修改请求或响应中的任何 URI。 使用绑定到服务器的 REST Assured 或 WebTestClient 时,这允许您在测试服务的本地实例时自定义文档中显示的 URI。modifyUrisPreprocessors

编写自己的预处理器

如果其中一个内置预处理器不能满足您的需求,您可以通过实现接口来编写自己的预处理器。 然后,您可以像使用任何内置预处理器完全相同的方式使用自定义预处理器。​​OperationPreprocessor​​

如果只想修改请求或响应的内容(正文),请考虑实现接口并将其与内置 .​​ContentModifier​​​​ContentModifyingOperationPreprocessor​​

配置

本节介绍如何配置 Spring REST 文档。

记录的 URI

本节介绍如何配置记录的 URI。

模拟Mvc URI定制

使用 MockMvc 时,Spring REST Docs 记录的 URI 的默认配置如下:

设置

违约

Spring REST Docs文档(二)中如何实现详细测试?

方案

​​localhost:8080​​

@Beforepublic void setUp() { this.webTestClient = WebTestClient.bindToApplicationContext(this.context).configureClient() .baseUrl("api.example.com") .filter(documentationConfiguration(this.restDocumentation)).build();}

将记录的 URI 的基数配置为 。​​api.example.com​​

代码段编码

默认代码段编码为 。 您可以使用 API 更改默认代码段编码。 例如,以下示例使用:​​UTF-8​​​​RestDocumentationConfigurer​​​​ISO-8859-1​

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.restDocumentation).snippets().withEncoding("ISO-8859-1")) .build();

当 Spring REST 文档将请求或响应的内容转换为 时,如果可用,则使用标头中指定的内容。 如果没有它,则使用 JVM 的缺省值。 您可以使用系统属性配置 JVM 的缺省值。​​String​​​​charset​​​​Content-Type​​​​Charset​​​​Charset​​​​file.encoding​​

代码段模板格式

默认代码段模板格式为 Asciidoctor。 开箱即用也支持降价。 您可以使用 API 更改默认格式。 以下示例演示如何执行此操作:​​RestDocumentationConfigurer​​

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.restDocumentation).snippets() .withTemplateFormat(TemplateFormats.markdown())) .build();

默认代码段

默认情况下会生成六个代码段:

  • ​​curl-request​​
  • ​​www.68idc.cn提供,感谢支持】

本文共计1390个文字,预计阅读时间需要6分钟。

Spring REST Docs文档(二)中如何实现详细测试?

自定义请求和响应记录+在特定情况下,您可能不想完全按照发送或接收的方式记录请求或响应。Spring REST Docs 提供了多种预处理工具,可用于在记录请求或响应之前对其进行处理。

自定义请求和响应

在某些情况下,您可能不希望完全按照发送的方式记录请求或完全按照收到的响应记录响应。 Spring REST Docs 提供了许多预处理器,可用于在记录请求或响应之前对其进行修改。

预处理是通过使用 或 . 您可以使用 上的 static 和 方法来获取实例。 以下示例演示如何执行此操作:​​document​​​​OperationRequestPreprocessor​​​​OperationResponsePreprocessor​​​​preprocessRequest​​​​preprocessResponse​​​​Preprocessors​​

this.mockMvc.perform(get("/")).andExpect(status().isOk()) .andDo(document("index", preprocessRequest(modifyHeaders().remove("Foo")), preprocessResponse(prettyPrint())));

应用请求预处理器,删除名为 的标头。​​Foo​​

应用一个响应预处理器,漂亮地打印其内容。

或者,您可能希望对每个测试应用相同的预处理器。 为此,可以在方法中使用 API 来配置预处理器。 例如,要从所有请求中删除标头并漂亮地打印所有响应,您可以执行以下操作之一(取决于您的测试环境):​​RestDocumentationConfigurer​​​​@Before​​​​Foo​​

private MockMvc mockMvc;@Beforepublic void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.restDocumentation).operationPreprocessors() .withRequestDefaults(modifyHeaders().remove("Foo")) .withResponseDefaults(prettyPrint())) .build();}

应用请求预处理器,删除名为 的标头。​​Foo​​

应用一个响应预处理器,漂亮地打印其内容。

然后,在每个测试中,您可以执行特定于该测试的任何配置。 以下示例演示如何执行此操作:

this.mockMvc.perform(get("/")).andExpect(status().isOk()) .andDo(document("index", links(linkWithRel("self").description("Canonical self link"))));

各种内置预处理器(包括上图所示的预处理器)可通过 上的静态方法获得。 有关更多详细信息,请参见下文。​​Preprocessors​​

预处理器

漂亮的印刷

​​prettyPrint​​on 设置请求或响应内容的格式,使其更易于阅读。​​Preprocessors​​

屏蔽链接

如果要记录基于超媒体的 API,则可能需要鼓励客户端使用链接而不是使用硬编码 URI 来导航 API。 一种方法是在文档中限制 URI 的使用。 on 将响应中任何链接的 替换为 。 如果需要,还可以指定其他替换。​​maskLinks​​​​Preprocessors​​​​href​​​​…​​

修改标头

可以使用 on 添加、设置和删除请求或响应标头。​​modifyHeaders​​​​Preprocessors​​

替换模式

​​replacePattern​​on 提供用于替换请求或响应中内容的通用机制。 与正则表达式匹配的任何匹配项都将被替换。​​Preprocessors​​

修改 URI

如果您使用 MockMvc 或未绑定到服务器的 WebTestClient,则应通过更改配置来自定义 URI。

可以使用 on 修改请求或响应中的任何 URI。 使用绑定到服务器的 REST Assured 或 WebTestClient 时,这允许您在测试服务的本地实例时自定义文档中显示的 URI。modifyUrisPreprocessors

编写自己的预处理器

如果其中一个内置预处理器不能满足您的需求,您可以通过实现接口来编写自己的预处理器。 然后,您可以像使用任何内置预处理器完全相同的方式使用自定义预处理器。​​OperationPreprocessor​​

如果只想修改请求或响应的内容(正文),请考虑实现接口并将其与内置 .​​ContentModifier​​​​ContentModifyingOperationPreprocessor​​

配置

本节介绍如何配置 Spring REST 文档。

记录的 URI

本节介绍如何配置记录的 URI。

模拟Mvc URI定制

使用 MockMvc 时,Spring REST Docs 记录的 URI 的默认配置如下:

设置

违约

Spring REST Docs文档(二)中如何实现详细测试?

方案

​​localhost:8080​​

@Beforepublic void setUp() { this.webTestClient = WebTestClient.bindToApplicationContext(this.context).configureClient() .baseUrl("api.example.com") .filter(documentationConfiguration(this.restDocumentation)).build();}

将记录的 URI 的基数配置为 。​​api.example.com​​

代码段编码

默认代码段编码为 。 您可以使用 API 更改默认代码段编码。 例如,以下示例使用:​​UTF-8​​​​RestDocumentationConfigurer​​​​ISO-8859-1​

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.restDocumentation).snippets().withEncoding("ISO-8859-1")) .build();

当 Spring REST 文档将请求或响应的内容转换为 时,如果可用,则使用标头中指定的内容。 如果没有它,则使用 JVM 的缺省值。 您可以使用系统属性配置 JVM 的缺省值。​​String​​​​charset​​​​Content-Type​​​​Charset​​​​Charset​​​​file.encoding​​

代码段模板格式

默认代码段模板格式为 Asciidoctor。 开箱即用也支持降价。 您可以使用 API 更改默认格式。 以下示例演示如何执行此操作:​​RestDocumentationConfigurer​​

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) .apply(documentationConfiguration(this.restDocumentation).snippets() .withTemplateFormat(TemplateFormats.markdown())) .build();

默认代码段

默认情况下会生成六个代码段:

  • ​​curl-request​​
  • ​​www.68idc.cn提供,感谢支持】