EasySwoole中进行单元测试
EasySwoole中进行单元测试
之前写了一篇文章《phpunit的安装以及在PhpStorm中的使用》,讲述如何在IDE中安装phpunit进行简单的单元测试。但是单是这样往往是不够的,实际项目中在进行测试之前,还需要初始化很多配置信息,比如数据库连接,核心组件的加载。今天再记录一下在easyswoole中无需通过IDE安装phpunit的情况下是如何进行单元测试。
1、准备工作
1)生成测试文件
2)生成的测试文件以及目录 UnitTest/User/UserTest.php
3)UnitTest/BaseTest.php
这里贴下BaseTest.php代码:
1 <?php 2 3 namespace UnitTest; 4 5 use Curl\Curl; 6 use EasySwoole\EasySwoole\Core; 7 use EasySwoole\EasySwoole\Logger; 8 use PHPUnit\Framework\TestCase; 9 10 /** 11 * BaseTest 12 * Class BaseTest 13 * Create With ClassGeneration 14 */ 15 class BaseTest extends TestCase 16 { 17 public static $isInit = 0; 18 19 /** @var Curl */ 20 public $curl; 21 public $apiBase = \'http://127.0.0.1:9501\'; 22 protected $modelName; 23 24 25 public function request($action, $data = [], $modelName = null) 26 { 27 $modelName = $modelName ?? $this->modelName; 28 $url = $this->apiBase . $modelName . $action; 29 $curl = $this->curl; 30 Logger::getInstance()->info("<<<<<<<<<<【单元测试】 url = " . $url . ", data = " . json_encode($data, JSON_UNESCAPED_UNICODE)); 31 $curl->post($url, $data); 32 if ($curl->response) { 33 Logger::getInstance()->info(">>>>>>>>>>【单元测试】 response = " . json_encode($curl->response, JSON_UNESCAPED_UNICODE)); 34 } else { 35 echo \'Error: \' . $curl->errorCode . \': \' . $curl->errorMessage . " 36 "; 37 } 38 $this->assertTrue(!!$curl->response); 39 $this->assertEquals(200, $curl->response->code, $curl->response->msg); 40 return $curl->response; 41 } 42 43 /** 44 * 初始化配置以及预加载各核心组件 45 * @return bool|void 46 */ 47 public function setUp() 48 { 49 if (self::$isInit == 1) { 50 Logger::getInstance()->info("<<<<<<<<<isInit:".self::$isInit); 51 return true; 52 } 53 require_once dirname(__FILE__, 2) . \'/vendor/autoload.php\'; 54 defined(\'EASYSWOOLE_ROOT\') or define(\'EASYSWOOLE_ROOT\', dirname(__FILE__, 2)); 55 require_once dirname(__FILE__, 2) . \'/EasySwooleEvent.php\'; 56 Core::getInstance()->initialize()->globalInitialize(); 57 self::$isInit = 1; 58 Logger::getInstance()->info(">>>>>>>>>isInit:".self::$isInit); 59 $this->curl = new Curl(); 60 } 61 }
View Code
注意request()这个方法
这是测试中实际要请求的地址,对应的路由我们提前在App\HttpController\Router.php中配置
Api/User/User.php (控制器)
Api/Base.php(User.php继承的父类)
2、在linux上运行easyswoole
这里开启两个shell,
1)其中一个运行easyswoole
2)另外一个执行phpunit命令
这里执行php easyswoole phpunit UnitTest/
那么如何解决呢?由于easyswoole文档中对于phpunit的命令讲解比较少
我们可以在easyswoole控制台执行:php easyswoole phpunit查看各参数用法
顺便说一句,我之前就特别不愿意看英文注释,发自内心比较抵触的那种。也不是看不懂,第一反应就是英文看着费劲,想快速地找到中文的答案。事实上,很多时候遇到问题到百度去搜索的结果千篇一律,还没法解决。改变一下思维,耐心的去看下原本的英文文档和注释。答案非常清晰并且安静地就在那儿。
然后这里看完,我们心里就应该明白,问题出在需要加上–bootstrap这个参数,它就是用来在测试运行前把文件加载进去的
我们再执行:php easyswoole phpunit –bootstrap UnitTest/BaseTest.php UnitTest/
结果正常,符合预期