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