编写测试用例的难点在于:如何准备参数数据
个人总结如下经验
一个函数尽可能的依赖基本数据类型而不是自定义类型,便于构建测试参数
如果参数是基本类型数据
数据量小:
直接模拟
数据量大(比如数据库中数据):
第一次读出来之后,序列化后保存为一个文件,建议用kryo进行序列化。需要使用时,对文件进行反序列化即可
如果参数是自定义类型
测试方法依赖
自定义类型的属性
属性是基本数据类型(服从第2条)
被依赖的属性一定要有set方法,不然不好构建
属性是自定义类型
如果该类型对象能直接模则直接模拟,否则kryo进行序列化,反序列化
测试方法依赖
自定义类型的方法
如果自定义类型能直接模拟,
则直接模拟(new 一个对象)
如果自定义类型很难构建(如果构造函数非常复杂的话),
可以使用jmock技术模拟一个对象
如果jmock也很难模拟的话,
那最好这个自定义类型有个接口,临时创建一个类,实现这个接口,模拟一个跟这个自定义类型相似的对象
如果方法没有副作用,返回执行结果
根据返回值判定测试方法是否正常工作
对于有副作用的方法,返函数执行状态(会改变非当前函数范围内的变量的值)
根据副作用是否生效,和返回值判定测试方法是否正常工作