40.3.10 自动配置的Spring REST Docs测试
如果想在测试类中使用Spring REST Docs,你可以使用@AutoConfigureRestDocs注解,它会自动配置MockMvc去使用Spring REST Docs,并移除对Spring REST Docs的JUnit规则的需要。
import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;import org.springframework.http.MediaType;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.test.web.servlet.MockMvc;import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;@RunWith(SpringRunner.class)@WebMvcTest(UserController.class)@AutoConfigureRestDocs("target/generated-snippets")public class UserDocumentationTests {@Autowiredprivate MockMvc mvc;@Testpublic void listUsers() throws Exception {this.mvc.perform(get("/users").accept(MediaType.TEXT_PLAIN)).andExpect(status().isOk()).andDo(document("list-users"));}}
此外,除了配置输出目录,@AutoConfigureRestDocs也能配置将出现在任何文档化的URLs中的部分,比如host,scheme和port等。如果需要控制更多Spring REST Docs的配置,你可以使用RestDocsMockMvcConfigurationCustomizer bean:
@TestConfigurationstatic class CustomizationConfigurationimplements RestDocsMockMvcConfigurationCustomizer {@Overridepublic void customize(MockMvcRestDocumentationConfigurer configurer) {configurer.snippets().withTemplateFormat(TemplateFormats.markdown());}}
如果想充分利用Spring REST Docs对参数化输出目录的支持,你可以创建一个RestDocumentationResultHandler bean,自动配置将使用它调用alwaysDo方法,进而促使每个MockMvc调用都会自动产生默认片段:
@TestConfigurationstatic class ResultHandlerConfiguration {@Beanpublic RestDocumentationResultHandler restDocumentation() {return MockMvcRestDocumentation.document("{method-name}");}}
