PHPUnit
手册
Sebastian Bergmann
PHPUnit
手册
Sebastian Bergmann
出版日期
此版本对应于
PHPUnit
4.8。最后更新于
2016-05-31。
版权
© 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Sebastian Bergmann
本作品依据
Creative Commons Attribution 3.0 Unported
许可协议进行授权。
iii
目录
1.
安装
PHPUnit ........................................................................................................... 1
需求
.................................................................................................................... 1
PHP
档案包
(PHAR) ............................................................................................. 1
Windows ..................................................................................................... 1
校验
PHPUnit PHAR
发行包
......................................................................... 2
Composer ............................................................................................................. 4
可选的组件包
...................................................................................................... 4
2.
编写
PHPUnit
测试
................................................................................................... 5
测试的依赖关系
................................................................................................... 5
数据供给器
.......................................................................................................... 8
对异常进行测试
................................................................................................. 12
对
PHP
错误进行测试
......................................................................................... 15
对输出进行测试
................................................................................................. 17
错误相关信息的输出
........................................................................................... 18
边缘情况
................................................................................................... 19
3.
命令行测试执行器
.................................................................................................. 21
命令行选项
........................................................................................................ 21
4.
基境
(fixture) ........................................................................................................... 28
setUp()
多
tearDown()
少
..................................................................................... 30
变体
.................................................................................................................. 30
基境共享
........................................................................................................... 30
全局状态
........................................................................................................... 31
5.
组织测试
................................................................................................................ 33
用文件系统来编排测试套件
................................................................................. 33
用
XML
配置来编排测试套件
.............................................................................. 34
6.
有风险的测试
......................................................................................................... 35
无用测试
........................................................................................................... 35
意外的代码覆盖
................................................................................................. 35
测试执行期间产生的输出
.................................................................................... 35
测试执行时长的超时限制
.................................................................................... 35
全局状态篡改
..................................................................................................... 35
7.
未完成的测试与跳过的测试
..................................................................................... 36
未完成的测试
..................................................................................................... 36
跳过测试
........................................................................................................... 37
用
@requires
来跳过测试
..................................................................................... 38
8.
数据库测试
............................................................................................................ 39
数据库测试所支持的供应商
................................................................................. 39
数据库测试的难点
.............................................................................................. 39
数据库测试的四个阶段
....................................................................................... 40
1.
清理数据库
............................................................................................ 40
2.
建立基境
................................................................................................ 40
3–5.
运行测试、验证结果、并拆除基境
........................................................ 40
PHPUnit
数据库测试用例的配置
.......................................................................... 40
实现
getConnection() ................................................................................... 41
实现
getDataSet() ........................................................................................ 41
数据库构架
(DDL)
怎么办?
.......................................................................... 41
小建议:使用你自己的抽象数据库
TestCase
类
............................................. 42
理解
DataSet(数据集)和
DataTable(数据表)
................................................. 43
可用的各种实现
......................................................................................... 43
当心外键
................................................................................................... 51
实现自有的
DataSet/DataTable ..................................................................... 51
数据库连接
API ................................................................................................. 52
数据库断言
API ................................................................................................. 53
对表中数据行的数量作出断言
..................................................................... 53
对表的状态作出断言
................................................................................... 53
PHPUnit
手册
iv
对查询的结果作出断言
............................................................................... 54
对多个表的状态作出断言
............................................................................ 54
常见问题(FAQ)
.............................................................................................. 55
PHPUnit
会为每个测试(重新)创建数据库吗?
........................................... 55
为了让数据库扩展模块正常工作,需要在应用程序中使用
PDO
吗?
.............. 55
如果看到
“Too much Connections”
错误该怎么办?
........................................ 55
Flat XML / CSV
数据集中如何处理
NULL?
.................................................. 56
9.
测试替身
................................................................................................................ 57
Stubs
(桩件)
................................................................................................... 57
仿件对象
(Mock Object) ....................................................................................... 62
Prophecy ............................................................................................................ 67
对特质
(Trait)
与抽象类进行模仿
........................................................................... 67
对
Web
服务
(Web Services)
进行上桩或模仿
.......................................................... 68
对文件系统进行模仿
........................................................................................... 70
10.
测试实践
.............................................................................................................. 73
在开发过程中
..................................................................................................... 73
在调试过程中
..................................................................................................... 73
11.
代码覆盖率分析
.................................................................................................... 75
用于代码覆盖率的软件衡量标准
.......................................................................... 75
包含与排除文件
................................................................................................. 76
略过代码块
........................................................................................................ 76
指明要覆盖的方法
.............................................................................................. 77
边缘情况
........................................................................................................... 79
12.
测试的其他用途
.................................................................................................... 80
敏捷文档
........................................................................................................... 80
跨团队测试
........................................................................................................ 80
13. PHPUnit
与
Selenium ............................................................................................. 81
Selenium Server .................................................................................................. 81
安装
.................................................................................................................. 81
PHPUnit_Extensions_Selenium2TestCase ................................................................ 81
PHPUnit_Extensions_SeleniumTestCase .................................................................. 82
14. Logging
(日志记录)
........................................................................................... 88
测试结果
(XML) ................................................................................................ 88
测试结果
(TAP) .................................................................................................. 89
测试结果
(JSON) ................................................................................................ 89
代码覆盖率
(XML) ............................................................................................. 90
代码覆盖率
(TEXT) ............................................................................................ 90
15.
扩展
PHPUnit ....................................................................................................... 91
从
PHPUnit_Framework_TestCase
派生子类
........................................................... 91
编写自定义断言
................................................................................................. 91
实现
PHPUnit_Framework_TestListener ................................................................. 92
从
PHPUnit_Extensions_TestDecorator
派生子类
..................................................... 93
实现
PHPUnit_Framework_Test ............................................................................ 94
A.
断言
..................................................................................................................... 96
assertArrayHasKey() ............................................................................................ 96
assertClassHasAttribute() ...................................................................................... 96
assertArraySubset() .............................................................................................. 97
assertClassHasStaticAttribute() ............................................................................... 98
assertContains() ................................................................................................... 98
assertContainsOnly() ........................................................................................... 100
assertContainsOnlyInstancesOf() ........................................................................... 101
assertCount() ..................................................................................................... 101
assertEmpty() .................................................................................................... 102
assertEqualXMLStructure() .................................................................................. 103
assertEquals() .................................................................................................... 104
assertFalse() ...................................................................................................... 109
assertFileEquals() ............................................................................................... 109
assertFileExists() ................................................................................................ 110
PHPUnit
手册
v
assertGreaterThan() ............................................................................................ 111
assertGreaterThanOrEqual() ................................................................................. 111
assertInstanceOf() .............................................................................................. 112
assertInternalType() ............................................................................................ 113
assertJsonFileEqualsJsonFile() .............................................................................. 113
assertJsonStringEqualsJsonFile() ........................................................................... 114
assertJsonStringEqualsJsonString() ........................................................................ 115
assertLessThan() ................................................................................................ 115
assertLessThanOrEqual() ..................................................................................... 116
assertNull() ....................................................................................................... 117
assertObjectHasAttribute() ................................................................................... 117
assertRegExp() .................................................................................................. 118
assertStringMatchesFormat() ................................................................................ 118
assertStringMatchesFormatFile() ........................................................................... 119
assertSame() ...................................................................................................... 120
assertStringEndsWith() ........................................................................................ 121
assertStringEqualsFile() ....................................................................................... 122
assertStringStartsWith() ....................................................................................... 123
assertThat() ....................................................................................................... 123
assertTrue() ....................................................................................................... 126
assertXmlFileEqualsXmlFile() .............................................................................. 126
assertXmlStringEqualsXmlFile() ........................................................................... 127
assertXmlStringEqualsXmlString() ........................................................................ 128
B.
标注
.................................................................................................................... 130
@author ........................................................................................................... 130
@after .............................................................................................................. 130
@afterClass ....................................................................................................... 130
@backupGlobals ................................................................................................ 131
@backupStaticAttributes ..................................................................................... 131
@before ........................................................................................................... 132
@beforeClass .................................................................................................... 132
@codeCoverageIgnore* ...................................................................................... 132
@covers ........................................................................................................... 133
@coversDefaultClass .......................................................................................... 133
@coversNothing ................................................................................................ 134
@dataProvider ................................................................................................... 134
@depends ......................................................................................................... 134
@expectedException .......................................................................................... 134
@expectedExceptionCode ................................................................................... 134
@expectedExceptionMessage ............................................................................... 135
@expectedExceptionMessageRegExp .................................................................... 136
@group ............................................................................................................ 136
@large ............................................................................................................. 136
@medium ......................................................................................................... 136
@preserveGlobalState ......................................................................................... 137
@requires ......................................................................................................... 137
@runTestsInSeparateProcesses ............................................................................. 137
@runInSeparateProcess ....................................................................................... 137
@small ............................................................................................................. 138
@test ............................................................................................................... 138
@testdox .......................................................................................................... 138
@ticket ............................................................................................................ 138
@uses .............................................................................................................. 138
C. XML
配置文件
..................................................................................................... 140
PHPUnit ........................................................................................................... 140
测试套件
.......................................................................................................... 141
分组
................................................................................................................ 141
为代码覆盖率包含或排除文件
............................................................................ 142