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/

 

结果正常,符合预期

 

posted @   欢乐豆123  阅读(693)  评论(2编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示