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 }
注意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/
结果正常,符合预期
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~