Spring Boot分层测试

这是我参与新手入门的第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,表示json数据的root表示json数据的root,.xxxx可以获取xxx的成员数据,用中括号可以将获取json数组中的某个元素,具体的可以看JsonPath Expressions

Spring Boot Service层测试

Spring Boot Service层的测试主要是要mock DAO层,DAO层也会由Spring容器进行管理,因此,mock方法和上面的类似,测试过程类似,这里不再赘述。

总结

到此Spring Boot的单元测试的介绍就告一段落了,基本上使用前面的工具就可以写出较为完备的测试,记住,自己写的代码一定要有单元测试覆盖率要求,这样将来重构,添加新的业务才不会痛苦,加油吧骚年!

参考文章

Spring boot测试方法

Injecting Mockito Mocks into Spring Beans

SpringBoot Test及注解详解

JsonPath Expressions

www.journaldev.com/21876/mocki…

www.baeldung.com/java-spring…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享