综述
使用 PHPUnit 进行单元测试可参看 PHPUnit5.0 手册。由于手册内容较多,刚接触时有些地方不易理解,这里针对 PHPUnit 内容进行通俗的归纳、及关键点的解释,帮助快速入门。
为什么要进行单元测试?
1.帮助理解需求
单元测试应该反映 Use Case,把被测单元当成黑盒测试其外部行为。
2.提高实现质量
单元测试不保证程序做正确的事,但能帮助保证程序正确地做事,从而提高实现质量。
3.测试成本低
相比集成测试、验收测试,单元测试所依赖的外部环境少,自动化程度高,时间短,节约了测试成本。
4.反馈速度快
单元测试提供快速反馈,把bug消灭在开发阶段,减少问题流到集成测试、验收测试和用户,降低了软件质量控制的成本。
5.利于重构
由于有单元测试作为回归测试用例,有助于预防在重构过程中引入 bug。
6.文档作用
单元测试提供了被测单元的使用场景,起到了使用文档的作用。
7.对设计的反馈
一个模块很难进行单元测试通常是不良设计的信号,单元测试可以反过来指导设计出高内聚、低耦合的模块。
经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的 Bug,并且修改它们的成本也很低。在软件开发的后期阶段,Bug 的发现并修改将会变得更加困难,并要消耗大量的时间和开发费用。无论什么时候作出修改都要进行完整的回归测试,在生命周期中尽早地对软件产品进行测试将使效率和质量得到最好的保证。 在提供了经过测试的单元的情况下,系统集成过程将会大大地简化。开发人员可以将精力集中在单元之间的交互作用和全局的功能实现上,而不是陷入充满很多 Bug 的单元之中不能自拔。
使测试工作的效力发挥到最大化的关键在于选择正确的测试策略,这其中包含了完全的单元测试的概念,以及对测试过程的良好的管理,还有适当地使用象 AdaTEST 和 Cantata 这样的工具来支持测试过程。这些活动可以产生这样的结果:在花费更低的开发费用的情况下得到更稳定的软件。更进一步的好处是简化了维护过程并降低了生命周期的费用。有效的单元测试是推行全局质量文化的一部分,而这种质量文化将会为软件开发者带来无限的商机。
== 环境配置 ==
-
=== 需求 ===
- PHPUnit 5.0 需要 PHP 5.6。
- 代码覆盖率分析报告功能需要 Xdebug (2.1.3以上)与 tokenizer 扩展。生成 XML 格式的报告需要有 xmlwriter 扩展。 === 安装 ===
- 安装请使用PHP 档案包 (PHAR)安装,具体过程参见PHPUnit手册: https://phpunit.de/manual/current/zh_cn/installation.html
- 注:网上很多介绍使用pear安装的PHPUnit的方法现在已失效(2014年失效)。
== Lumen框架中使用PHPUnit ==
-
=== Lumen框架对PHPUnit的支持 ===
- Lumen 框架对 PHPUnit 提供了非常好的支持与封装,在 Lumen 框架中进行单元测试的操作涉及根目录的 tests 文件夹、 phpunit.xml 及 database 文件夹。 ==== phpunit.xml ====
- phpunit.xml 中是对测试环境的配置,下面根据具体配置代码讲解关键点:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="bootstrap/app.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<!--覆盖率报告白名单-->
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app/Http/Modules/...</directory>
<directory suffix=".php">./app/Http/Models</directory>
<