为什么 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
注释
所以参考文档建议
@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
注释