手撸php框架2.1--使用测试框架phpunit

测试驱动开发,虽然我接触这个开发方式不久,但我还是想应用到我们的项目中来。好了,不多说,开干。
我们使用的测试框架是:phpunit

1.phpunit安装
在composer.json文件的require-dev下,添加 “phpunit/phpunit”: “>=6.5.0”,使用哪个版本,需要根据php版本和你自己的喜好决定,然后执行composer update即可

2.一般在项目根目录下执行:./vendor/bin/phpunit tests 即可,tests是测试文件所在的目录,我们的测试文件放到和vendor同级的tests中,所以参数是tests

3.封装phpunit的TestCase类
我们不直接使用phpunit提供的TestCase类,而是自己封装一层,叫做TankTestCase,放到tests文件的根目录下,代码如下:

 namespace tankunit; use PHPUnit\Framework\TestCase; abstract class TankTestCase extends TestCase { }

4.在使用yii框架时,我们一般有一个入口脚本:web/index.php,index.php中引入了我们的项目核心文件Yii,和composer的类自动加载文件vendor/autoload.php。在我们的Tank框架中,我们也打算使用这种方式。但是,在写测试代码的时候,我们怎么引入这些文件呢?不用着急,phpunit提供了在测试之前引入某些文件的方式:–bootstrap path/to/bootstrapfile
在我们的项目中,bootstrap.php文件放到了tests的根目录下,所以运行测试时要执行这条命令:

./vendor/bin/phpunit tests –bootstrap tests/bootstrap.php

bootstrap.php中会引入我们的核心类Tank,composer的自动加载文件vendor/autoload.php,还有我们封装的phpunit的测试类TankTestCase,代码如下:

 error_reporting(-1); define('TANK_DEBUG', true); $_SERVER['SCRIPT_NAME'] = '/' . __DIR__; $_SERVER['SCRIPT_FILENAME'] = __FILE__; $composerAutoloadFile = __DIR__ . '/../vendor/autoload.php'; if (is_file($composerAutoloadFile)) { require_once($composerAutoloadFile);//引入composer的类自动加载器 } require_once __DIR__ . '/../framework/Tank.php';//引入我们的框架核心类 require_once __DIR__ . '/TankTestCase.php';//引入封装的测试类

ok,到这里,我们的测试部分完事了,之后我们在开发时把测试代码写入相应的tests下的文件中,然后在项目根目录下执行./vendor/bin/phpunit tests –bootstrap tests/bootstrap.php即可。

欲知下事如何,且听下回分解……
github源码:https://github.com/2lovecode/tank

你可能感兴趣的:(PHP,框架从零写)