PHPUnit阅读笔记 - 1
测试相关概念
测试 (Testing)
依照《程序员的职业素养》一书中的说法,自动化测试分为如下几类:
单元测试
组件测试
集成测试
系统测试
人工探索式测试
大部分情况下,PHP开发人员对自己开发的功能进行简单的组件测试,利用echo
、var_dump
之类的输出语句或者FirePHP
、Kint
等输出工具进行简单的功能测试,通过后交由专业的测试人员进行集成测试以及之后的测试。
这种情况下,测试人员进行的实际上是黑盒测试
,只能测试出某功能是否出错,依照测试人员自身的经验给予开发人员错误的建议。
测试驱动开发 (TDD)
测试驱动开发(Test-Driven Development)是极限编程(XP)的一项重要实践。
原则是在开发前编写测试用例,按照用例进行开发,边开发边测试。
比如,开发某种功能时,我们预先假定这个功能由某种类调用某种方法实现,需要传入某些参数。这样,我们测试就只需要测试这个类和这个方法,对其中的过程不干预。
开发时,尽可能的满足测试用例使用的方法、参数,可以在完成该项功能后立刻进行测试。
单元测试 (Unit Testing)
“单元测试”也是测试的一种,我认为与黑盒测试有相通之处。
大部分情况下,PHPUnit是调用某个或者某些方法,输入测试用例以得到测试结果,然后与期待的结果进行对比; 中间过程只是对方法进行调用,并不进入方法代码本身,而且对于Object的非可见方法(private, protected)也是不可调用的,所以类似黑盒。
PHPUnit相关概念
基境 (Fixture)
以下是PHPUnit中对基境的描述:
在编写测试时,最费时的部分之一是编写代码来将整个场景设置成某个已知的状态,并在测试结束后将其复原到初始状态。这个已知的状态称为测试的基境(fixture)。
PHPUnit中,每个测试方法都是独立的初始状态,方法和方法之间除了声明的依赖之外无从属关系,类似不同的sandbox。
PHPUnit使用setUp()
和tearDown()
方法建立和释放每个测试方法所依赖的基境。