Phpunit 組件
EasySwoole/Phpunit 是對(duì) Phpunit 的協(xié)程定制化封裝,主要為解決自動(dòng)協(xié)程化入口的問(wèn)題。并屏蔽了 Swoole ExitException。
組件要求
- php: >= 7.3
- ext-swoole: ^4.4.0
- phpunit/phpunit: ^9.3
安裝方法
composer require easyswoole/phpunit
倉(cāng)庫(kù)地址
基本使用
./vendor/bin/co-phpunit tests
或者使用以下方式:
php easyswoole.php phpunit tests
默認(rèn)采用協(xié)程容器去執(zhí)行測(cè)試用例,使用非協(xié)程采用以下方式:
php easyswoole.php phpunit --no-coroutine
注:tests 為要的測(cè)試目錄,用于放需要進(jìn)行單元測(cè)試的文件。
預(yù)處理
easyswoole/phpunit 支持在項(xiàng)目目錄下定義一個(gè) phpunit.php,用戶(hù)可以在該文件中,進(jìn)行統(tǒng)一的測(cè)試前預(yù)處理,其他測(cè)試與 phpunit 一致。
如何進(jìn)行單元測(cè)試
這里以 ORM 組件為測(cè)試演示:
連接注冊(cè)
請(qǐng)?jiān)?EasySwoole 全局的 initialize 事件中注冊(cè)。
<?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)
{
}
}
預(yù)處理
請(qǐng)?jiān)?EasySwoole 項(xiàng)目根目錄下創(chuàng)建 phpunit.php 文件。
<?php
use EasySwoole\EasySwoole\Core;
require_once __DIR__ . '/vendor/autoload.php';
Core::getInstance()->initialize();
注:在 3.4.x 之前版本,initialize 事件調(diào)用為:EasySwoole\EasySwoole\Core::getInstance()->initialize()->globalInitialize();。
編寫(xiě)測(cè)試用例
新建 tests\DbTest.php,編輯內(nèi)容如下:
<?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]);
}
}
注:請(qǐng)注冊(cè) composer.json 下 Tests 命名空間與 tests 目錄的映射關(guān)系。
映射關(guān)系大致如下所示:
{
"require": {
"easyswoole/easyswoole": "3.4.4",
"easyswoole/phpunit": "^1.0",
"easyswoole/orm": "^1.4"
},
"autoload": {
"psr-4": {
"App\\": "App/",
"Tests\\": "tests/"
}
}
}
然后執(zhí)行 composer dumpautoload。
執(zhí)行
./vendor/bin/co-phpunit tests
或者執(zhí)行
php easyswoole.php phpunit tests/DbTest.php