PHPUnit 手册

Sebastian Bergmann

本作品依据 Creative Commons Attribution 3.0 Unported 许可协议进行授权。

此版本对应于 PHPUnit 4.2。 最后更新于 2014-05-25。


1. 安装 PHPUnit
需求
PHP 档案包(PHAR)
Composer
可选的组件包
2. 编写 PHPUnit 测试
测试的依赖关系
数据供给器
对异常进行测试
对 PHP 错误进行测试
对输出进行测试
错误相关信息的输出
边缘情况
3. 命令行测试执行器
命令行选项
4. 基境(fixture)
setUp() 多 tearDown() 少
变体
共享基境
全局状态
5. 组织测试
用文件系统来编排测试套件
用 XML 配置来编排测试套件
6. 严格模式
无用测试
意外覆盖的代码
测试执行期间产生的输出
测试执行时长的超时限制
7. 不完整的测试与跳过的测试
不完整的测试
跳过测试
用 @requires 来跳过测试
8. 数据库测试
数据库测试所支持的供应商
数据库测试中的难点
数据库测试的四个阶段
1. 清理数据库
2. 建立基境
3–5. 运行测试、验证结果、并拆除基境
PHPUnit 数据库测试用例的配置
实现 getConnection()
实现 getDataSet()
有关数据库构架(DDL)?
小建议:使用你自己的抽象数据库 TestCase 类
理解 DataSet(数据集)和 DataTable(数据表)
可用的各种实现
当心外键
自行实现 DataSet/DataTable
数据库连接 API
数据库断言 API
对表中数据行的数量作出断言
对表的状态作出断言
对查询的结果作出断言
对多个表的状态作出断言
常见问题(FAQ)
PHPUnit 会为每个测试(重新)创建数据库吗?
为了让数据库扩展模块正常工作,需要在应用程序中使用 PDO 吗?
如果看到 Too much Connections 错误该咋办?
Flat XML / CSV 数据集中如何处理 NULL?
9. 测试替身
短连件(Stub)
仿件对象(Mock Object)
对性状(Trait)与抽象类进行模仿
对 Web 服务(Web Services)进行短连或模仿
对文件系统进行模仿
10. 测试实践
在开发过程中
在调试过程中
11. 代码覆盖率分析
指明要覆盖的方法
忽略代码块
包含与排除文件
边缘情况
12. 测试的其他用途
敏捷文档
跨团队测试
13. PHPUnit 与 Selenium
Selenium Server
安装
PHPUnit_Extensions_Selenium2TestCase
PHPUnit_Extensions_SeleniumTestCase
14. 日志记录
测试结果(XML)
测试结果(TAP)
测试结果(JSON)
代码覆盖率(XML)
代码覆盖率(TEXT)
15. 扩展 PHPUnit
从 PHPUnit_Framework_TestCase 派生子类
编写自定义断言
实现 PHPUnit_Framework_TestListener
从 PHPUnit_Extensions_TestDecorator 派生子类
实现 PHPUnit_Framework_Test
A. 断言
assertArrayHasKey()
assertClassHasAttribute()
assertClassHasStaticAttribute()
assertContains()
assertContainsOnly()
assertContainsOnlyInstancesOf()
assertCount()
assertEmpty()
assertEqualXMLStructure()
assertEquals()
assertFalse()
assertFileEquals()
assertFileExists()
assertGreaterThan()
assertGreaterThanOrEqual()
assertInstanceOf()
assertInternalType()
assertJsonFileEqualsJsonFile()
assertJsonStringEqualsJsonFile()
assertJsonStringEqualsJsonString()
assertLessThan()
assertLessThanOrEqual()
assertNull()
assertObjectHasAttribute()
assertRegExp()
assertStringMatchesFormat()
assertStringMatchesFormatFile()
assertSame()
assertSelectCount()
assertSelectEquals()
assertSelectRegExp()
assertStringEndsWith()
assertStringEqualsFile()
assertStringStartsWith()
assertTag()
assertThat()
assertTrue()
assertXmlFileEqualsXmlFile()
assertXmlStringEqualsXmlFile()
assertXmlStringEqualsXmlString()
B. 标注
@author
@after
@afterClass
@backupGlobals
@backupStaticAttributes
@before
@beforeClass
@codeCoverageIgnore*
@covers
@coversDefaultClass
@coversNothing
@dataProvider
@depends
@expectedException
@expectedExceptionCode
@expectedExceptionMessage
@group
@large
@medium
@preserveGlobalState
@requires
@runTestsInSeparateProcesses
@runInSeparateProcess
@small
@test
@testdox
@ticket
C. XML 配置文件
PHPUnit
测试套件
分组
为代码覆盖率包含或排除文件
日志记录
测试监听器(Test Listeners)
设定 PHP INI 配置、常量、全局变量
为 Selenium RC 配置浏览器
D. 升级
从 PHPUnit 3.7 升级到 PHPUnit 4.0
从 PHPUnit 4.0 升级到 PHPUnit 4.1
从 PHPUnit 4.1 升级到 PHPUnit 4.2
E. 索引
F. 参考书目
G. 版权