sas 接口单元测试

为什么需要单元测试

单元测试拥有保证代码质量、尽早发现软件 Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。

单元测试的价值

单元测试是针对代码单元的独立测试,核心是"独立",优势来源也是这种独立性。单元测试与系统测试是互补而非代替关系,单元测试的优势正是系统测试的不足,单元测试的不足又恰是系统测试的优势。

正确认识单元测试

不能将单元测试当做解决所有问题的万金油,而需理解其优势与不足,扬长避短,与系统测试相辅相成,实现测试的最大效益。

快速开始

引入依赖

在 pom.xml 中引入测试相关依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-test</artifactId>
	<scope>test</scope>
</dependency>

单元测试 Controller 接口

以 SysUserController 的 info 接口为例,展示如何进行 Controller 接口的单元测试。

SysUserController info 接口

测试代码示例

测试要点

使用 MockMvc 模拟 HTTP 请求,使用 Spring Security Test 提供的 user() 方法模拟用户登录。

@SpringBootTest
public class SysUserControllerTest {

    @Autowired
    private WebApplicationContext context;

    private MockMvc mvc;

    @BeforeEach
    public void setup() {
        mvc = MockMvcBuilders.webAppContextSetup(context).apply(springSecurity()).build();
    }

    @Test
    public void testGetCurrentUser() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/user/info").with(user(mockUser())))
            .andDo(print())
            .andExpect(status().isOk());
    }

    /**
     * mockUser 对象
     * @return UserDetails
     */
    PigxUser mockUser() {
        return new PigxUser(1L, "admin", 1L, "", "", ""
                , "", "", 1L, "", true, true
                , "0", true, true, AuthorityUtils.NO_AUTHORITIES);
    }
}