测试相关概念

测试 (Testing)

依照《程序员的职业素养》一书中的说法,自动化测试分为如下几类:

单元测试
组件测试
集成测试
系统测试
人工探索式测试

大部分情况下,PHP开发人员对自己开发的功能进行简单的组件测试,利用echovar_dump之类的输出语句或者FirePHPKint等输出工具进行简单的功能测试,通过后交由专业的测试人员进行集成测试以及之后的测试。

这种情况下,测试人员进行的实际上是黑盒测试,只能测试出某功能是否出错,依照测试人员自身的经验给予开发人员错误的建议。

测试驱动开发 (TDD)

测试驱动开发(Test-Driven Development)是极限编程(XP)的一项重要实践。

原则是在开发前编写测试用例,按照用例进行开发,边开发边测试。

比如,开发某种功能时,我们预先假定这个功能由某种类调用某种方法实现,需要传入某些参数。这样,我们测试就只需要测试这个类和这个方法,对其中的过程不干预。

开发时,尽可能的满足测试用例使用的方法、参数,可以在完成该项功能后立刻进行测试。

单元测试 (Unit Testing)

“单元测试”也是测试的一种,我认为与黑盒测试有相通之处。

大部分情况下,PHPUnit是调用某个或者某些方法,输入测试用例以得到测试结果,然后与期待的结果进行对比; 中间过程只是对方法进行调用,并不进入方法代码本身,而且对于Object的非可见方法(private, protected)也是不可调用的,所以类似黑盒。

PHPUnit相关概念

基境 (Fixture)

以下是PHPUnit中对基境的描述:

在编写测试时,最费时的部分之一是编写代码来将整个场景设置成某个已知的状态,并在测试结束后将其复原到初始状态。这个已知的状态称为测试的基境(fixture)。

PHPUnit中,每个测试方法都是独立的初始状态,方法和方法之间除了声明的依赖之外无从属关系,类似不同的sandbox。

PHPUnit使用setUp()tearDown()方法建立和释放每个测试方法所依赖的基境。