有效的单元测试 第五章小结

重复
字面量重复;提取到局部变量
结构重复;提取到方法
语义重复,即同一功能的不同实现;转换为结构重复后提取到方法

条件逻辑
一个测试中不应出现条件逻辑,若非常必要,则将逻辑处理提取到辅助方法中。

脆弱的测试
依赖时间、随机数、多线程的测试;规避(依赖其他确定的对象),控制(使用mock模拟),隔离(提取到专门的测试中集中处理)

残缺的文件路径
文件路径不可使用绝对路径,否则跨平台会测试失败,System类方法获取到的路径同样是绝对路径;使用基于项目的相对路径“./***”、getClass().getResource("****").getFile()获取其文件路径,或使用流代替文件。

永久的临时文件
多个测试涉及到临时文件的使用时会共享文件,所有初始化时需要使用File.delete()保证不留下物理文件,否则会造成测试的依赖性导致测试不独立。(使用 I/O 同时会显著增加测试的时间)

沉睡的蜗牛
涉及线程的测试中,Thread.sleep()会显著增加测试的时间,并且无法确定线程何时结束;使用java.util.concurrent中的同步对象来代替sleep.

像素完美
测试内容的抽象层次要和断言的抽象层次一致,细节交由辅助函数处理

参数化混乱
新工具用的不好不如不用

方法间的内聚
高内聚理想状态:类中每个字段被每个方法使用;将符合此状态的类和字段提取到新类,被所有方法用到的字段提取到基类或新类进行继承或组合。

posted @ 2019-07-31 17:43  你怪哉  阅读(200)  评论(0编辑  收藏  举报