如何使用MockMvc和Spring Security过滤器为Spring Boot控制器创建集成测试?



我有一个使用Spring Security来保护路由的Spring Boot应用程序。每次用户尝试访问端点时,都要通过安全过滤器对用户进行身份验证。现在,我想使用MockMvc为控制器创建一个集成测试。

我遵循了官方文档,但是我不断得到与WebSecurityConfig及其相关依赖项的自定义bean相关的错误。我尝试了各种组合的注释,如@SpringBootTest, @WebMvcTest, @ContextConfiguration和@AutoConfigureMockMvc,但我似乎不能让它工作。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
public class CsrfShowcaseTests {
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity()) 1
.build();
}

我的目标是有一个控制器集成测试,它只测试控制器层,模拟依赖关系,并使用模拟用户(@WithMockUser)来通过身份验证过滤器。

谁能提供关于如何建立满足这些需求的集成测试的指导?

spring-security-test依赖性为模拟用户进行集成测试提供了很好的支持。

可以使用


@WithAnonymousUser or @WithMockUser 
除此之外,要运行集成测试,您可以:
  • 任意使用(这将启用完整的上下文,并且您可以使用@MockBean模拟服务层):
@SpringBootTest
@AutoConfigureMockMvc(addFilters = false)
  • 或者可以尝试使用下面的设置:
@ExtendWith(SpringExtension.class)
@WebMvcTest(YourController.class)
@AutoConfigureMockMvc(addFilters = false)
@ImportAutoConfiguration(classes = {SecurityConfig.class})

希望对你有帮助。

最新更新