一、安装PHPUnit
1、linux下安装
全局安装
wget https://phar.phpunit.de/phpunit-6.2.4.phar
chmod +x phpunit-6.2.4.phar
sudo mv phpunit-6.2.4.phar /usr/local/bin/phpunit
phpunit --version
或者直接调用phar文件运行
wget https://phar.phpunit.de/phpunit-6.2.4.phar
php phpunit-6.2.4.phar --version
2、Windows下安装
下载phpunit-6.2.4.phar文件后,放在自己指定的目录。cmd命令行下,在文件所在目录运行如下命令
echo @php "%~dp0phpunit-6.2.4.pharr" %* > phpunit.cmd
然后把phpuni.cmd所在目录加入到环境变量,即可运行phpunit --version查看版本
二、执行PHPUnit
我在Yii项目的根目录下创建了test目录,phpunit的文件包我都放在了该目录下。tets目录如下
code下是单元测试的文件,我们直接在项目的根目录运行如下命令即可执行单元测试
D:\www\wln>phpunit test\code UserTest
三、配置
若UserTest中只是简单的测试,我们遵循以上步骤即可。但我们的测试需要用的Yii框架的各种类,运行UserTest之前,就需要把Yii2框架的各种插件和类先加载进来。上图的autoload.php就是做这件事的。我们看下autoloa.php中的内容
<?php
define('YII_ENV', 'test');
defined('YII_DEBUG') or define('YII_DEBUG', true);
include_once __DIR__.'/../vendor/autoload.php';
require_once __DIR__.'/../vendor/yiisoft/yii2/Yii.php';
//composer下的自动加载类声明自定义的命名空间对应的真是路径
/*$classLoader = new \Composer\Autoload\ClassLoader();
$classLoader->addPsr4("app\\", __DIR__.'/../appapi/', true);
$classLoader->addPsr4("common\\", __DIR__.'/../common/', true);
$classLoader->register();*/
//这段代码是声明自定义的命名空间所对应的真是路径,是Yii2框架下的声明。
//他的作用与上面注释掉的代码是相同的
require __DIR__ . '/../common/config/bootstrap.php';
require __DIR__ . '/../appapi/common/config/bootstrap.php';
$config = \common\library\ArrayHelper::merge(
require(__DIR__ . '/../common/config/main.php'),
require(__DIR__ . '/../appapi/common/config/main.php')
);
(new \yii\web\Application($config));
//Yii::setAlias('@test', __DIR__);
我们看到该文件与Yii2的入口文件index.php内容基本相同,唯一不同的是最后的new出来的对象没有执行 run() 方法
整理好autoload.php文件后,我们执行如下命令
D:\www\wln>phpunit --bootstrap test\code\autoload.php test\code UserTest
在UserTest.php中我们就可以自由使用Yii项目的数据等相关组件
但是这样,我们每次运行命令都需要指定bootstrap很麻烦。这个时候我们可以创建phpunit的配置文件,在配置文件中指定bootstrap文件的路径,就不用每次在执行命令式时输入bootstrap文件的路径了。配置文件phpunit.xml内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- 展示了一个最小化的 phpunit.xml 例子,它将在递归遍历 tests 时添加所有在 *Test.php 文件中找到的 *Test 类-->
<phpunit bootstrap="/test/autoload.php">
<testsuites>
<testsuite name="mytest">
<directory>/test/code</directory>
</testsuite>
</testsuites>
</phpunit>
<!--#指定文件测试顺序-->
<phpunit bootstrap="/test/autoload.php">
<testsuites>
<testsuite name="mytest">
<file>test/code/HelloTest.php</file>
<file>test/code/MoneyTest.php</file>
<file>test/code/SiteTest.php</file>
</testsuite>
</testsuites>
</phpunit>
我们把该文件放在了根目录下,所以我们在执行phpunit命令时,必须在根目录,PHPunit才会自动加载配置文件。
以上,就是Yii项目下使用phpunit的基本流程和配置。