Spring Boot 1.4增加了@WebMvcTest
,用於連接測試應用程序的web切片所需的部分。這真是太棒了,但是我也想確保我的自定義過濾器和安全代碼已連線,因此我可以驗證它是否正常工作。如何使用@WebMvcTest並在我自己的自定義過濾器中添加?
如何在使用@WebMvcTest
時添加自定義過濾器?
Spring Boot 1.4增加了@WebMvcTest
,用於連接測試應用程序的web切片所需的部分。這真是太棒了,但是我也想確保我的自定義過濾器和安全代碼已連線,因此我可以驗證它是否正常工作。如何使用@WebMvcTest並在我自己的自定義過濾器中添加?
如何在使用@WebMvcTest
時添加自定義過濾器?
除了春季啓動選項@Phil韋伯指出的那樣,你可以使用普通Spting框架的功能和做這樣的事情:
@Autowired
private WebApplicationContext context;
@Autowired
private FilterChainProxy springSecurityFilter;
@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.addFilters(springSecurityFilter)
.apply(SecurityMockMvcConfigurers.springSecurity())
.build();
}
@AutoConfigureWebMvc
目前導入以下的自動配置類(見spring.factories
spring-boot-test-autoconfigure
JAR):
# AutoConfigureMockMvc auto-configuration imports
org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc=\
org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration,\
org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityAutoConfiguration,\
org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration,\
org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration
出這個名單MockMvcSecurityAutoConfiguration
會自動提供安全過濾器的集成。
如果您需要添加對其他過濾器的支持,您可以編寫自己的MockMvcBuilderCustomizer
(請參閱MockMvcSecurityConfiguration.SecurityMockMvcBuilderCustomizer
獲取靈感)。
您可以使用嵌套@TestConfiguration
類掛鉤您定製成一個特定的測試,你可以添加自己的spring.factories
和使用AutoConfigureMockMvc
鍵自動將其添加到所有測試。
在Spring Security和自定義過濾器中使用@WebMvcTest
時,它將自動配置到MockMvc
實例中。你可以在rwinch/spring-boot-sample/tree/so-38746850-webmvctest-customfilters看到這個工作。具體來說,DemoApplicationTests表明Spring Security已正確設置並且自定義篩選器已設置。
Spring Boot自動添加所有的Filter
s使用SpringBootMockMvcBuilderCustomizer.addFilters設置。
MockMvcSecurityConfiguration用於設置Spring Security的測試件(即通過增加Spring Security的SecurityMockMvcRequestPostProcessors.testSecurityContext()
到MockMvc
情況下允許使用@MockUser
。