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/

 

結果正常,符合預期

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM