为什么要做单元测试?现状

  1. 不知道怎么编写单元测试
  2. 项目没有要求,所以不编写
  3. 单元测试价值不高,完全是浪费时间
  4. 业务逻辑比较简单,不值得编写单元测试
  5. 不管怎样,集成测试将会抓住所有的 bug,用不着进行单元测试
  6. 在项目的前期还是尽量去编写单元测试,但是越到项目的后期就越失控
  7. 为了完成编码任务,没有足够的时间编写单元测试

工具(一):Junit4

  • 注解的使用
  • @Test
  • @Before @After
  • @BeforeClass @AfterClass

工具(二):spring-boot-starter-test

  • 注解的使用
  • @RunWith(SpringRunner.class)
  • @SpringBootTest
  • 断言:对结果进行验证
  • Assert
  • 模拟HTTP环境
  • 注解:@AutoConfigureMockMvc
  • 工具类:MockMvc(3步)
  • perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
  • MockMvcRequestBuilders提供了get/post/put/delete/upload等http请求的方式
  • 提供了header/contentType/cookie/characterEncoding/params等设置request参数的方式
  • ResultActions
  • andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;
  • andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台;
  • andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理;
  • MvcResult(自定义Assert)
  • getModelAndView:获得控制层设置的ModeAndView对象
  • getResponse:获得最终响应结果

工具(三):Mockito

  • 打桩:实际上就是对接口、类、方法、参数、返回值进行伪造或者模拟。
  • ReflectionTestUtils
  • 注解的使用
  • @Mock:真实对象的替代品
  • @Spy:被测试对象需要一部分被执行、一部分被mock,需要用spy对目标对象进行包装
  • thenReturn与doReturn差异
  • 语法:
  • when-thenReturn
  • when(obj.method()).thenReturn(returnValue)
  • doReturn-when
  • doReturn(returnValue).when(obj).method()
  • 差异

API

Mock Obj

Spy Obj

when-thenReturn

×


doReturn-when

×

×

总结

本文详细的讲解了Junit,Mockito,以及spring boot的测试工具,相信各位看官老爷一定还想了解更多详细内容和使用技巧。