# 附录 D. 升级
# 从 PHPUnit 3.7 升级到 PHPUnit 4.0
-
在 PHPUnit 3.5 中引入的[对静态方法进行上桩或模拟](http://sebastian-bergmann.de/blog/883-Stubbing-and-Mocking-Static-Methods.html)的有限支持已移除。此功能仅当被上桩或模拟的静态方法是从同一个类其他方法中调用时才能正常工作。我们认为,没有理由为了这个功能的这点有限的用途而在测试替身代码生成器中增加那么多代码复杂度。对这个移除动作我们表示很抱歉,有可能需要重构测试代码以使得不需要此功能来对其进行测试。
-
`addRiskyTest()` 方法已添加到 `PHPUnit_Framework_TestListener` 接口。所有实现了本方法的类必须实现此新方法。这正式 PHPStorm 7 与 PHPUnit 4 不兼容的原因。
-
为了修复 [#552](https://github.com/sebastianbergmann/phpunit/issues/552)、[#573](https://github.com/sebastianbergmann/phpunit/issues/573) 和 [#582](https://github.com/sebastianbergmann/phpunit/issues/582),必须更改 PHPUnit 的 XML 配置文件中对相对路径的解析方式。现在,某个配置文件中所有相对路径都是相对于此配置文件所在路径进行解析的。在升级后,可能需要更新以下配置指令中的相对路径:`testSuiteLoaderFile`、`printerFile`、`testsuites/file` 和 `testsuites/exclude`。
-
[提供两个字符串(给assertEquals())时不再调用数值比较](https://github.com/sebastianbergmann/phpunit/commit/f5df97cda0b25f2b7368395344da095ac529de62)。
请注意,从 PHPUnit 4.0.0 开始,PHPUnit 的 PEAR 包只作为分发 PHP 档案包(PHAR)的一种机制,PHPUnit 的许多依赖项不再单独通过 PEAR 发布。最终,我们将完全停止在 PEAR 发布 PHPUnit。
请注意,如果用 PEAR 安装器来从 PHPUnit 3.7 升级到 PHPUnit 4.0,将导致在 PHP 环境变量所指定的 PEAR 目录中遗留一些 PHPUnit 依赖项(PHP_CodeCoverage、 PHPUnit_MockObject、……)老版本的陈旧源文件。建议卸载对应的 PEAR 包。
- PHPUnit 手册
- 1. 安装 PHPUnit
- 需求
- PHP 档案包 (PHAR)
- Composer
- 可选的组件包
- 2. 编写 PHPUnit 测试
- 测试的依赖关系
- 数据供给器
- 对异常进行测试
- 对 PHP 错误进行测试
- 对输出进行测试
- 错误相关信息的输出
- 3. 命令行测试执行器
- 命令行选项
- 4. 基境(fixture)
- setUp() 多 tearDown() 少
- 变体
- 基境共享
- 全局状态
- 5. 组织测试
- 用文件系统来编排测试套件
- 用 XML 配置来编排测试套件
- 6. 有风险的测试
- 无用测试
- 意外的代码覆盖
- 测试执行期间产生的输出
- 测试执行时长的超时限制
- 全局状态篡改
- 7. 未完成的测试与跳过的测试
- 未完成的测试
- 跳过测试
- 用 @requires 来跳过测试
- 8. 数据库测试
- 数据库测试所支持的供应商
- 数据库测试的难点
- 数据库测试的四个阶段
- PHPUnit 数据库测试用例的配置
- 理解 DataSet(数据集)和 DataTable(数据表)
- 数据库连接 API
- 数据库断言 API
- 常见问题(FAQ)
- 9. 测试替身
- Stubs (桩件)
- 仿件对象(Mock Object)
- Prophecy
- 对特质(Trait)与抽象类进行模仿
- 对 Web 服务(Web Services)进行上桩或模仿
- 对文件系统进行模仿
- 10. 测试实践
- 在开发过程中
- 在调试过程中
- 11. 代码覆盖率分析
- 用于代码覆盖率的软件衡量标准
- 包含与排除文件
- 略过代码块
- 指明要覆盖的方法
- 边缘情况
- 12. 测试的其他用途
- 敏捷文档
- 跨团队测试
- 13. Logging (日志记录)
- 测试结果 (XML)
- 测试结果 (TAP)
- 测试结果 (JSON)
- 代码覆盖率 (XML)
- 代码覆盖率 (TEXT)
- 14. 扩展 PHPUnit
- 从 PHPUnit_Framework_TestCase 派生子类
- 编写自定义断言
- 实现 PHPUnit_Framework_TestListener
- 从 PHPUnit_Extensions_TestDecorator 派生子类
- 实现 PHPUnit_Framework_Test
- A. 断言
- assertArrayHasKey()
- assertClassHasAttribute()
- assertArraySubset()
- assertClassHasStaticAttribute()
- assertContains()
- assertContainsOnly()
- assertContainsOnlyInstancesOf()
- assertCount()
- assertEmpty()
- assertEqualXMLStructure()
- assertEquals()
- assertFalse()
- assertFileEquals()
- assertFileExists()
- assertGreaterThan()
- assertGreaterThanOrEqual()
- assertInfinite()
- assertInstanceOf()
- assertInternalType()
- assertJsonFileEqualsJsonFile()
- assertJsonStringEqualsJsonFile()
- assertJsonStringEqualsJsonString()
- assertLessThan()
- assertLessThanOrEqual()
- assertNan()
- assertNull()
- assertObjectHasAttribute()
- assertRegExp()
- assertStringMatchesFormat()
- assertStringMatchesFormatFile()
- assertSame()
- assertStringEndsWith()
- assertStringEqualsFile()
- assertStringStartsWith()
- assertThat()
- assertTrue()
- assertXmlFileEqualsXmlFile()
- assertXmlStringEqualsXmlFile()
- assertXmlStringEqualsXmlString()
- B. 标注
- @author
- @after
- @afterClass
- @backupGlobals
- @backupStaticAttributes
- @before
- @beforeClass
- @codeCoverageIgnore*
- @covers
- @coversDefaultClass
- @coversNothing
- @dataProvider
- @depends
- @expectedException
- @expectedExceptionCode
- @expectedExceptionMessage
- @expectedExceptionMessageRegExp
- @group
- @large
- @medium
- @preserveGlobalState
- @requires
- @runTestsInSeparateProcesses
- @runInSeparateProcess
- @small
- @test
- @testdox
- @ticket
- @uses
- C. XML 配置文件
- PHPUnit
- 测试套件
- 分组
- 为代码覆盖率包含或排除文件
- Logging (日志记录)
- 测试监听器
- 设定 PHP INI 设置、常量、全局变量
- 为 Selenium RC 配置浏览器
- D. 升级
- E. 索引
- F. 参考书目
- G. 版权