这是我参与新手入门的第3篇文章
前两篇文章我们分别介绍了配置、编写和运行一个Spring Boot测试程序,如何使用mockito对不容易构造或者获取的对象进行mock。接下来为大家介绍Spring Boot中Controller层的单元测试和Service层的单元测试如何编写。
Spring Boot controller层测试
Spring Boot为collector层的测试提供了极为方便的工具,可以使用MockMvc类对controller的接口进行测试,无需启动一个真实的server就可以模拟controller层收到一条HTTP请求。
对controller层进行测试,那就需要对controller层所依赖的service层进行mock,由于Service层和controller层都是由Spring容器管理的,那么直接使用@MockBean对Service进行mock和注入即可,具体的看下面的程序:
@RestController
public class AddController{
@Autowired
private AddService addService;
@RequestMapping(value = "/add", method = {RequestMethod.GET},
consumes = "application/json", produces = "application/json")
public Response<Integer> add(
@RequestParam("a") int a,
@RequestParam("b") int b
) {
int sum = addService.add(a,b);
return new Response<Integer>(sum);
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureWebMvc
@AutoConfigureMockMvc
public class AddControllerTest {
@MockBean
private AddService addService;
@Autowired
private MockMvc mockMvc;
@Test
public void addTest(){
when(addService.add(1,1)).thenReturn(2);
mockMvc.perform(get("/conv")
.contentType(MediaType.APPLICATION_JSON)
.param("a", "1")
.param("b", "1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code", is(0)))
.andExpect(jsonPath("$.data", is(new Integer(2))));
}
}
复制代码
-
JsonPath Expressions
在最后判读返回的json数据是否符合预期时,使用了JsonPath Expressions,.xxxx可以获取xxx的成员数据,用中括号可以将获取json数组中的某个元素,具体的可以看JsonPath Expressions
Spring Boot Service层测试
Spring Boot Service层的测试主要是要mock DAO层,DAO层也会由Spring容器进行管理,因此,mock方法和上面的类似,测试过程类似,这里不再赘述。
总结
到此Spring Boot的单元测试的介绍就告一段落了,基本上使用前面的工具就可以写出较为完备的测试,记住,自己写的代码一定要有单元测试覆盖率要求,这样将来重构,添加新的业务才不会痛苦,加油吧骚年!
参考文章
Injecting Mockito Mocks into Spring Beans