接上篇:https://developer.aliyun.com/article/1227482?spm=a2c6h.13148508.setting.30.48e04f0eaBVGWH
八、 不必要的JSON序列化
以上章节,都是说JSON资源文件在单元测试中如何运用,如何利用JSON资源文件把单元测试编写得更优雅。有时候,任何手段都有两面性,过渡依赖JSON资源文件测试,也会把单元测试复杂化。这里,作者总结了几个例子以示说明。
1. 完全透传的对象
1) 完全透传的参数对象
在测试方法中,有些参数没有被任何修改,只是完全被透传而已。
被测方法:
测试用例:
其中,不需要ArgumentCaptor去捕获userDAO.batchCreate的参数并验证参数值,这里只需要验证createList是不是同一个对象即可。
2) 完全透传的返回对象
在测试方法中,有些返回值没有被任何修改,只是完全被透传而已。
被测方法:
测试用例:
其中,userList对象不需要构造数据,只需要验证是不是同一个对象即可。
2. 完全透传的属性
1) 完全透传的参数值属性
在测试方法中,有些参数值属性没有被任何修改,只是完全被透传而已。
被测方法:
测试用例:
其中,user对象不需要构造数据,只需要验证是不是同一个对象即可。
2) 完全透传的返回值属性
在测试方法中,有些返回值属性没有被任何修改,只是完全被透传而已。
被测方法:
测试用例:
其中,user对象不需要构造数据,只需要验证是不是同一个对象即可。
3. 仅用少数字段的对象
1) 仅用少数字段的参数值对象
在测试方法中,有些参数值对象字段虽多,但只会用到其中少数字段。
被测方法:
测试用例:
其中,不需要构造参数值userCreate的所有属性字段,只需构造使用到的name属性字段即可。
2) 仅用少数字段的返回值对象
在测试方法中,有些返回值对象字段虽多,但只会用到其中少数字段。
被测方法:
测试用例:
其中,不需要构造返回值user的所有属性字段,只需构造使用到的roleId属性字段即可。
4. 使用new还是mock初始化对象?
在上面案例中,我们都采用new来初始化对象并采用set来模拟属性值的。有些同学会问,为什么不采用mock来初始化对象、用doReturn-when来模拟属性值?我想说,都是一样的效果,只是前者显得更简洁而已。
关于使用new还是mock初始化对象,这个问题在网上一直有争论,双方都各有自己的理由。
这里,按照作者的个人使用习惯,进行了简单的归纳总结如下:
接下篇:https://developer.aliyun.com/article/1227478?groupCode=java