Spring AutoConfigureRestDocs 附加配置

问题描述

我正在使用 Spring REST 文档生成文档,并且我正在使用新的注释 @AutoConfigureRestDocs 而不是在 @BeforeEach 方法中明确定义。以下测试目前正在运行。

@WebMvcTest(PayrollController.class)
@AutoConfigureRestDocs
class PayrollControllerTest {

    @Autowired
    private mockmvc mockmvc;

    @Test
    void testHello() throws Exception {
        this.mockmvc.perform(mockmvcRequestBuilders.get("/api/payroll/hello"))
                .andExpect(status().isOk())
                .andExpect(content().string("hello world"));
    }
}

但现在我需要漂亮地打印我的回复,我不想在每种方法中都这样做。根据 spring 文档,可以选择使用 RestDocsmockmvcConfigurationCustomizer 进一步自定义。我确实创建了一个该类型的 bean,如下所示:

     @WebMvcTest(PayrollController.class)
        @AutoConfigureRestDocs
        class PayrollControllerTest {
        
            @Configuration
            static class RestDocsConfiguration {
                @Bean
                public RestDocsmockmvcConfigurationCustomizer restDocsmockmvcConfigurationCustomizer() {
                    return configurer -> configurer.operationPreprocessors().withResponseDefaults(Preprocessors.prettyPrint());
                }
            }
         @Autowired
         private mockmvc mockmvc;
    
        @Test
        void testHello() throws Exception {
            this.mockmvc.perform(mockmvcRequestBuilders.get("/api/payroll/hello"))
                    .andExpect(status().isOk())
                    .andExpect(content().string("hello world"));
        }
}

但是现在我所有的测试都失败了并且返回 404 not found。有人可以帮助我吗?

解决方法

问题是由您使用 @Configuration 引起的。如 Spring Boot reference documentation 中所述,当您的测试类具有嵌套的 @Configuration 类时,将使用它代替应用程序的主要配置。您应该在嵌套的 @TestConfiguration 类中使用 RestDocsConfiguration