《重构改善既有代码的设计》——构筑测试体系

正如作者所言,“花合理时间抓住大多数Bug,要好过穷尽一生抓出所有Bug”。

测试的重点应当集中在可能出错的地方,这帮助你尽快排查错误、大大缩短调试程序的时间。

测试的三个基本原则:自动化、本身有效、单元测试。要点如下:

1. 构建自测试代码

Java开发测试惯用手法是testing main(),意思是每个类都有一个用于测试的main()函数。这是一个合理的习惯,但可能不好操纵。

Java开发另一个更轻松的做法,是建立一个独立的类用于测试,并在一个框架中运行它,例如Junit框架。

2. 采用Junit测试框架

测试框架的composite结构:

Test接口

—>TestSuit类:产生一个测试套件

—>—>addTest()方法:添加测试用例

—>TestCase类:所有测试用例都需要继承该类

—>—>FileReaderTester类:

—>—>—>setUp()方法:用来产生相关对象

—>—>—>tearDown()方法:用来删除对象

—>TestRunner类:所有测试用例都需要继承该类

—>—>—>run()方法:运行suit()套件,输出运行时间、测试用例个数、运行结果

assert()函数:可扮演自动测试角色,参数未true则一切良好,否则输出错误信息

assertEquals()函数:以equals()进行对象比较,以==进行数值比较。

编写测试代码时,往往先在assert()中放置一个错误,以保证测试确实能运行。

功能测试把系统当做黑箱,单元测试使程序Bug浮现出来。

考虑可能出错的边界条件,把火力都集中在那儿。

有用的测试函数:

testReadAtEnd():assertEquals(-1, _input.read()), 测试文件是否读到末尾,需要加到测试套件中:suite.addTest(new FileReaderTester("testReadAtEnd"))

3. 添加更多测试

随着测试越来越多,可以另外生成一个类,专门用来包含由其他测试类所组成的测试套件suit。类似于主控的测试类。

测试不可能找出所有Bug,但是一旦进行重构,就能更好地理解整个程序。

观察代码,看哪儿变得复杂;观察函数,思考哪些地方可能是错的。

发布了392 篇原创文章 · 获赞 492 · 访问量 241万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览