《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(6) https://developer.aliyun.com/article/1232282?groupCode=java
五、 JSON资源文件的来源
JSON资源文件来源方式很多,作者根据实际操作经验,总结出以下几种以供大家参考。
1. 来源于自己组装
直接利用JSON编辑器或者纯文本编辑器,自己一个字段一个字段地编写JSON资源数据。
注意:这种方式容易出现JSON格式错误及字符串转义问题。
2. 来源于代码生成
做为程序员,能够用程序生成JSON资源数据,就绝不手工组装JSON资源数据。下面,便是利用Fastjson的JSON.toJSONString方法生成JSON资源数据。
执行该程序后,生成的JSON资源数据如下:
注意:这种方式能够避免JSON格式错误及字符串转义问题。
3. 来源于线上日志
如果是事后补充单元测试,首先想到的就是利用线上日志。比如:
从上面的日志中,我们可以得到方法userDAO.queryByCompanyId的请求参数companyId取值为"1",返回结果为“[{"id":1,"name":"Changyi","title":"Java Developer"...},{"id":2,"name":"Tester","title":"Java Tester"...},...]”。
注意:要想得到现成的JSON资源数据,就必须输出完整的JSON数据内容。但是,由于JSON数据内容过大,一般不建议全部输出。所以,从线上日志中也不一定能够拿到现成的JSON资源数据。
4. 来源于集成测试
集成测试,就是把整个或部分项目环境运行起来,能够连接数据库、Redis、MetaQ、HSF等所依赖的第三方服务环境,然后测试某一个方法的功能是否能够达到预期。
执行上面集成测试用例,输出的日志内容如下:
上面日志中,userList后面的就是我们需要的JSON资源数据。
我们也可以用集成测试得到方法内部的方法调用的参数值和返回值,具体方法如下:
• 首先,在源代码中添加日志输出语句;
• 然后,执行单元测试用例,得到对应的方法调用参数值和返回值;
• 最后,删除源代码中日志输出语句,恢复源代码为原来的样子。
5. 来源于测试过程
有一些数据,是由被测方法生成的,比如:方法返回值和调用参数。针对这类数据,可以在测试过程中生成,然后逐一进行数据核对,最后整理成JSON资源文件。
被测方法:
测试用例:
执行单元测试后,提示以下问题:
上面的错误信息中,后面括号中的就是我们需要需要的JSON资源数据。
注意:一定要进行数据核对,这有可能是错误代码生成的错误数据。用错误数据去验证生成它的代码,当然不会测试出其中的问题。
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(8) https://developer.aliyun.com/article/1232280?groupCode=java