环境:winwods
php版本:5.6.*
PHPUnit安装
1:下载phpunit可执行命令文件phpunit.phar【可选项】
为 PHP 的二进制可执行文件建立一个目录,例如 C:\bin,并加入到环境变量,方便cmd命令的执行
下载 https://phar.phpunit.de/phpunit.phar 并将文件保存到 C:\bin\phpunit.phar
打开命令行(例如,按 Windows+R » 输入 cmd » ENTER),创建命令脚本(最后得到 C:\bin\phpunit.cmd):
C:\Users\username> cd C:\bin
C:\bin> echo @php "%~dp0phpunit.phar" %* > phpunit.cmd
C:\bin> exit
2:下载phpUnit官方组建包【必须】
composer require --dev phpunit/phpunit ^5.6
此时大致的目录结构:
其中./vendor/bin中也会包含phpunit的命令脚本,与第一步重复了
使用方式
编写测试代码
<?php
/**
* 用户类测试
*
* Class UserTest
*/
class UserTest extends PHPUnit_Framework_TestCase
{
/**
* 测试获取用户名
*
* @author liu.bin 2019/1/31 10:24
*/
public function testGetName()
{
// 此处需要手动引入被测试的class
include_once "../src/UserModel.php";
$name = '张三';
$age = 18;
$userModel = new \src\UserModel($name,$age);
$this->assertEquals($name, $userModel->getName());
}
/**
* 测试获取年纪
*
* @author liu.bin 2019/1/31 10:24
*/
public function testGetAge()
{
// 此处需要手动引入被测试的class
include_once "../src/UserModel.php";
$name = '张三';
$age = 19;
$userModel = new \src\UserModel($name,$age);
$this->assertEquals($age, $userModel->getAge());
}
}
测试代码写好后,即可执行phpunit命令
cd ***/test
D:\***\vendor\bin\phpunit .\UserTest.php
大致结果:
.. 2 / 2 (100%)
Time: 577 ms, Memory: 20.50MB
OK (2 tests, 2 assertions)
Generating code coverage report in HTML format ... done
代码覆盖率统计
如果想统计单元测试的代码覆盖率,还需要完成两步工作
1:安装xdebug(必须)
具体过程省略,可参考网络教程
必选扩展xdebug的说明:http://www.phpunit.cn/manual/current/zh_cn/code-coverage-analysis.html
2:编辑phpunit.xml文件,此phpunit.xml文件放置在test目录下面;如果不编辑此文件,需要在phpunit命令时添加相应参数,非常麻烦。
./
../src
如果没有此xml文件,我们在写单元测试的时候需要手动加载被测试的原文件,也无法完成测试覆盖率的统计,系统无法获取总测试代码量是多少
使用composer包里面的phpunit命令,会很方便的加载phpunit组件,方便测试;
使用手动下载的phpunit命令,我们需要在测试代码中手动引入./vendor/autoload.php文件,或者添加命令行参数:–bootstrap,比较麻烦;
如果我们自己编写了phpunit.xml,可以实现类的自动加载和phpunit的配置信息,便无所谓使用哪种方式的phpunit命令了。
bootstrap=”Config.php”,此参数可以自动加载当前目录的Config.php;此文件可以定义时区,require vendor/autoload.php等操作,此时便可以用手动下载的phpunit命令执行单元测试,也会自动加载phpunit组件了。
testsuite,此参数配置哪些目录下的单元测试文件允许被phpUnit命令执行;suffix=”Test.php”定义单元测试文件的后缀名
filter whitelist 配置可以加载哪些被测试的类,实现自动加载被测试的原文件
logging coverage-html生成单元测试覆盖率的保存方式和目录;生成coverage-html方便查看;需要配置whitelist参数,针对whitelist中原文件做单元测试覆盖率统计