Phpunit 組件
EasySwoole/Phpunit 是對 Phpunit
的協程定制化封裝,主要為解決自動協程化入口的問題。并屏蔽了 Swoole ExitException
。
組件要求
- php: >= 7.3
- ext-swoole: ^4.4.0
- phpunit/phpunit: ^9.3
安裝方法
composer require easyswoole/phpunit
倉庫地址
基本使用
./vendor/bin/co-phpunit tests
或者使用以下方式:
php easyswoole.php phpunit tests
默認采用協程容器去執行測試用例,使用非協程采用以下方式:
php easyswoole.php phpunit --no-coroutine
注:tests
為要的測試目錄,用于放需要進行單元測試的文件。
預處理
easyswoole/phpunit
支持在項目目錄下定義一個 phpunit.php
,用戶可以在該文件中,進行統一的測試前預處理,其他測試與 phpunit
一致。
如何進行單元測試
這里以 ORM
組件為測試演示:
連接注冊
請在 EasySwoole
全局的 initialize
事件中注冊。
<?php
namespace EasySwoole\EasySwoole;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\ORM\Db\Connection;
use EasySwoole\ORM\DbManager;
class EasySwooleEvent implements Event
{
public static function initialize()
{
date_default_timezone_set('Asia/Shanghai');
$config = new \EasySwoole\ORM\Db\Config(Config::getInstance()->getConf("MYSQL"));
DbManager::getInstance()->addConnection(new Connection($config));
}
public static function mainServerCreate(EventRegister $register)
{
}
}
預處理
請在 EasySwoole
項目根目錄下創建 phpunit.php
文件。
<?php
use EasySwoole\EasySwoole\Core;
require_once __DIR__ . '/vendor/autoload.php';
Core::getInstance()->initialize();
注:在 3.4.x 之前版本
,initialize
事件調用為:EasySwoole\EasySwoole\Core::getInstance()->initialize()->globalInitialize();
。
編寫測試用例
新建 tests\DbTest.php
,編輯內容如下:
<?php
namespace Tests;
use EasySwoole\Mysqli\QueryBuilder;
use PHPUnit\Framework\TestCase;
use EasySwoole\ORM\DbManager;
class DbTest extends TestCase
{
function testCon()
{
$builder = new QueryBuilder();
$builder->raw('select version()');
$ret = DbManager::getInstance()->query($builder,true)->getResult();
$this->assertArrayHasKey('version()',$ret[0]);
}
}
注:請注冊 composer.json
下 Tests
命名空間與 tests
目錄的映射關系。
映射關系大致如下所示:
{
"require": {
"easyswoole/easyswoole": "3.4.4",
"easyswoole/phpunit": "^1.0",
"easyswoole/orm": "^1.4"
},
"autoload": {
"psr-4": {
"App\\": "App/",
"Tests\\": "tests/"
}
}
}
然后執行 composer dumpautoload
。
執行
./vendor/bin/co-phpunit tests
或者執行
php easyswoole.php phpunit tests/DbTest.php