一、第一次做UT,有一些自己的小收获,记录下,顺便希望能够帮助到别人。
二、Mock
mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法
说白了,Mock就是可以给你制造任何你想要的对象,分层测试,你可以只测试controller或者service,而不需要牵扯到下层的调用,这样的话,测试就变得容易了。你可以Mock任何自己想要的资源。
假设你的接口,有500种不同的返回结果,你要制造这500种返回结果来提高覆盖率,那么你会累死在写UT上,但是,你可以Mock让它返回任意值,这样UT覆盖率就会像坐火箭一样,嗖嗖的上升,哈哈哈!!!
1、当你进行controller层的测试的时候,需要Mock掉service层,
例如:
@Mock
private RouteServiceImpl routeService;
然后,你可以返回自己设置的、想要的、任意的内容,list是我期望返回的内容,
when(routeService.selectByRouteId(any())).thenReturn(list);
2、当你进行service层的测试的时候,需要Mock掉Dao(Mapper)层,
例如:
@Mock
private RuleMapper ruleMapper;
任意的大于0的整数是我期望的返回内容,
when(ruleMapper.insertSelective(any())).thenReturn(1);
3、有try/catch的块,需要加
@Test(expected = RuntimeException.class)
写UT之后,感觉代码的编写,会很大程度影响测试的繁简情况。当然,如果你确实是TDD,可能就不需要这样的建议。
1、尽量少用if/else,尤其忌讳嵌套,否则,你的UT肯定会写一大堆,毕竟,要么if,要么else(废话)
2、if里的逻辑,少用&& ||,嵌套多了,分支多的会让你哭的
3、少用static方法,目前我还不会static方法的测试/::</::</::<
4、少用private方法,测试困难,关于私有方法,可以测试调用它的方法。