为什么 MockMvc 测试建议注入 WebApplicationContext @BeforeEach 测试?

Why do MockMvc tests suggest injecting WebApplicationContext @BeforeEach test?

所以参考文档建议

    @BeforeEach
    void setup( WebApplicationContext wac) {
        this.mockMvc = MockMvcBuilders.webAppContextSetup( wac )
            .apply( SecurityMockMvcConfigurers.springSecurity() )
            .alwaysDo( print() )
            .build();
    }

为什么不把它作为构造函数注入呢? (我没试过这个,我只是假设它不会立即爆炸)

    @Autowired
    MyControllerTest(
        @NonNull WebApplicatonContext wac
    ) {
        this.mockMvc = MockMvcBuilders.webAppContextSetup( wac )
            .apply( SecurityMockMvcConfigurers.springSecurity() )
            .alwaysDo( print() )
            .build();
    }

在将 JUnit Jupiter 与 SpringExtension.

一起使用时,选择构造函数注入、方法注入还是字段注入取决于个人喜好。

参考手册中的示例简单地展示了一种使用 @BeforeEach 方法的方法,因为许多人都熟悉在“之前”方法中执行测试设置。

您还可以在测试 class 构造函数中设置您的 MockMvc 实例,如果您愿意,您可以将 mockMvc 字段设为 final

this commit 中,我在 Spring 自己的测试套件中更新了一个测试 class,以在实践中演示其中的一些技术。

请注意,如果测试 class 构造函数接受与 ApplicationContext.

兼容的单个参数,则不需要用 @Autowired 注释