PHP单元测试PHPUnit

简介

# PHPUnit的依赖

  • dom,PHP默认启用

  • json,PHP默认启用

  • pcre,PHP默认启用

  • reflection,PHP默认启用

  • spl,PHP默认启用

  • tokenizer,PHP默认启用,生成代码覆盖率测试报告用到

  • xdebug,需要自己安装,生成代码覆盖率测试报告用到

  • xmlwriter,PHP默认启用,生成XML格式的报告用到

检查PHP是否启用了这些模块可以使用如下命令

php -m | grep '模块名称'

PHPUnit的安装

PHP档案包方式

wget https://phar.phpunit.de/phpunit.phar #  下载档案包
chmod +x phpunit.phar #  赋可执行权限
sudo mv phpunit.phar /usr/local/bin/phpunit
phpunit --version #  查看PHPUnit版本

Composer方式

Composer使用参考https://getcomposer.org/

composer文件如下

编写PHPUnit测试

惯例和基本步骤

  1. 针对类Class的测试写在类ClassTest中。

  2. ClassTest通常继承自PHPUnit_Framework_TestCase。

  3. 测试都是命名为test*的公用方法(也可以在放的文档注释块中使用@test标注将其标记未测试方法)。

  4. 在测试方法内,类似于assertEquals()这样的断言方法用来对实际值与预期值的匹配做出断言

举个例子:

执行测试命令

结果

依赖

@depends表示依赖关系

数据提供器

@dataProvider表示数据提供器

对异常进行测试

@expectedException表示程序抛出异常

@expectedException可以结合@expectedExceptionCode、@expectedExceptionMessage、@expectedExceptionMessageRegExp使用

对输出进行测试

expectOutputString方法可以测试程序的输出

PHPUnit的输出

先看一个demo

执行命令

输出结果如下

看输出第二行,有.FEF等,分表表示如下信息:

  1. . :表示断言通过

  2. F:表示断言失败

  3. E:表示测试过程中抛出一个错误

  4. R:表示测试被标记为有风险

  5. S:表示测试被跳过

  6. I :表示测试被标记未不完整或未实现