1、简介
spring-security进行单元测试,从而自动化测试埋下伏笔。也无需频繁在在浏览器进行测试,也加快了开发人员的调试速度。
2、无验证单元测试
由于spring-security进行的都是安全方面的校验,而与实际的逻辑并没有太大关系。
如果单单想测试逻辑的可靠性,那么可以使用MockMvc来进行测试,这样大大减少了测试成本。
代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringSecurityTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext context;
@Before
public void setUp(){
mockMvc= MockMvcBuilders
.webAppContextSetup(context)
.build();
}
@Test
public void giveAuth_with200() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/user/get"))
.andExpect(MockMvcResultMatchers.status().isOk());
}
}
有验证测试
如果开发人员想使用角色,账号,密码进行测试。
单元测试依然可以满足您的要求。即在初始化时候添加apply(springSecurity())方法和使用@WithMockUser注解。
package com.bulingfeng.login;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
/**
* @Author:bulingfeng
* @Date: 2021/7/28
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringSecurityTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext context;
@Before
public void setUp(){
mockMvc= MockMvcBuilders
.webAppContextSetup(context)
// 添加spring-security的验证
.apply(springSecurity())
.build();
}
@WithMockUser(roles="ADMIN")
@Test
public void giveAuth_with200() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/user/get"))
.andExpect(MockMvcResultMatchers.status().isOk());
}
}
|