spring-单元测试概要

前言

单元测试是日常开发重要的一环,全面的单元测试能够及时发现bug,为整个系统提供安全可靠的代码单元。当然,作为后端程序,也要进行单元测试才能保证代码的准确性。

新建单元测试

单元测试放在一个类里面,单元测试类和代码类一般一一对应。

进入到代码类,右键类型,点击Go To > Test。如果没有测试类,提示新建测试类。

注解

进行spring-boot程序单元测试时,需要添加@SpringBootTest注解,导入测试相关的组件。

进行单元测试时,服务器无需启动。

@SpringBootTest

注解表明这是一个spring-boot单元测试类。

@SpringBootTest
class Task2ApplicationTests {

  @Test
  void contextLoads() {

  }

}

@Transactional

一般情况下,单元测试调用接口时,如果有数据库操作,会对数据库进行修改。为了只测试接口的逻辑是否正确,可以在测试类上添加@Transactional注解,这样测试单元的所有修改操作在测试结束后会被还原。

@Transactional
@SpringBootTest
class UserControllerTest {
  @Test
  void lock() throws Exception {
    MockHttpServletResponse result = mockMvc.perform(
        MockMvcRequestBuilders.patch("/users/{id}/state", 1)
            .param("locked", "true")
    ).andReturn().getResponse();
    System.err.println(result.getStatus() + "|" + result.getContentAsString());
  }
}

MockMvc

创建MockMvc的方法有两种,可以通过MockMvcBuilders来创建。

public final class MockMvcBuilders {
	public static DefaultMockMvcBuilder webAppContextSetup(WebApplicationContext context) {
		return new DefaultMockMvcBuilder(context);
	}
	public static StandaloneMockMvcBuilder standaloneSetup(Object... controllers) {
		return new StandaloneMockMvcBuilder(controllers);
	}
}

一种是DefaultMockMvcBuilder,另外一种是StandaloneMockMvcBuilder,两种的区别是:

  • DefaultMockMvcBuilder需要传入一个上下文WebApplicationContext,构造器从上下文对象获取控制器。
  • StandaloneMockMvcBuilder直接传入控制器。

创建请求

使用MockMvcRequestBuilders对象来创建请求。

MockHttpServletRequestBuilder request = MockMvcRequestBuilders.patch("/users/{id}/state", 1)
            .param("locked", "true")

MockMvc执行请求

MockHttpServletResponse response = mockMvc.perform(request).andReturn()

处理结果

response.getStatus()
response.getContentAsString()

你可能感兴趣的:(服务器)