spring-test构建Java测试体系(1) 对于使用Spring MVC构建的Java Web应用,Controller是属于最前面一层的,本文将介绍如何针对Controller编写单元测试。
1. Maven依赖信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <parent > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-parent</artifactId > <version > 2.1.1.RELEASE</version > <relativePath /> </parent > <dependencies > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-web</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-test</artifactId > <scope > test</scope > </dependency > </dependencies >
2. 定义一个REST接口 定义一个实体类Demo
1 2 3 4 public class Demo { private String name; }
新建一个Controller类,定义一个查询方法。 URL为GET demos
,调用成功后将返回一个json数组,http返回码为200 OK。
1 2 3 4 5 6 7 8 9 @Controller @RequestMapping("demos") public class DemoController { @GetMapping public ResponseEntity<List> searchDemo () { return new ResponseEntity <>(new ArrayList <Demo>(), HttpStatus.OK); } }
3. 编写测试用例 对于单元测试来说只需要关注Controller层,而不需要加载整个Spring上下文。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @RunWith(MockitoJUnitRunner.class) public class MockDemoControllerTest { private MockMvc mockMvc; @InjectMocks private DemoController demoController; @Before public void setUp () throws Exception { mockMvc = MockMvcBuilders.standaloneSetup(demoController).build(); } @Test public void should_get_demos () throws Exception { mockMvc.perform(get("/demos" )).andDo(print()) .andExpect(status().isOk()); } }
4. 总结 在本篇小文中介绍了如何针对Spring Boot编写的REST接口进行测试,用到了spring-tes
提供的MockMvc
实现对HTTP请求的模拟。除此之外,测试中还利用MockMvc
提供的验证工具对结果进行断言。
本文只能算是一个开头,示例项目中并没有调用任何业务逻辑,我将在下一篇中讲述如何mock依赖关系。
SpringBoot基础之MockMvc单元测试