Phpunit 组件

EasySwoole/Phpunit 是对 Phpunit 的协程定制化封装,主要为解决自动协程化入口的问题。并屏蔽了 Swoole ExitException

组件要求

  • ext-swoole: ^4.4.0
  • phpunit/phpunit: ^9.3

安装方法

composer require easyswoole/phpunit

仓库地址

easy-swoole/phpunit

基本使用

./vendor/bin/co-phpunit tests

或者使用以下方式:

php easyswoole phpunit tests

默认采用协程容器去执行测试用例,使用非协程采用以下方式:

php easyswoole phpunit —no-coroutine

注:tests 为要的测试目录,用于放需要进行单元测试的文件。

预处理

easyswoole/phpunit 支持在项目目录下定义一个 phpunit.php,用户可以在该文件中,进行统一的测试前预处理,其他测试与 phpunit 一致。

如何进行单元测试

这里以 ORM 组件为测试演示:

连接注册

请在 EasySwoole 全局的 initialize 事件中注册。

  1. <?php
  2. namespace EasySwoole\EasySwoole;
  3. use EasySwoole\EasySwoole\AbstractInterface\Event;
  4. use EasySwoole\EasySwoole\Swoole\EventRegister;
  5. use EasySwoole\ORM\Db\Connection;
  6. use EasySwoole\ORM\DbManager;
  7. class EasySwooleEvent implements Event
  8. {
  9. public static function initialize()
  10. {
  11. date_default_timezone_set('Asia/Shanghai');
  12. $config = new \EasySwoole\ORM\Db\Config(Config::getInstance()->getConf("MYSQL"));
  13. DbManager::getInstance()->addConnection(new Connection($config));
  14. }
  15. public static function mainServerCreate(EventRegister $register)
  16. {
  17. }
  18. }

预处理

请在 EasySwoole 项目根目录下创建 phpunit.php 文件。

  1. <?php
  2. use EasySwoole\EasySwoole\Core;
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. Core::getInstance()->initialize();

注:在 3.4.x 之前版本initialize 事件调用为:EasySwoole\EasySwoole\Core::getInstance()->initialize()->globalInitialize();

编写测试用例

新建 tests\DbTest.php,编辑内容如下:

  1. <?php
  2. namespace Test;
  3. use EasySwoole\Mysqli\QueryBuilder;
  4. use PHPUnit\Framework\TestCase;
  5. use EasySwoole\ORM\DbManager;
  6. class DbTest extends TestCase
  7. {
  8. function testCon()
  9. {
  10. $builder = new QueryBuilder();
  11. $builder->raw('select version()');
  12. $ret = DbManager::getInstance()->query($builder,true)->getResult();
  13. $this->assertArrayHasKey('version()',$ret[0]);
  14. }
  15. }

注:请注册 composer.jsonTest 命名空间与 tests 目录的映射关系。

映射关系大致如下所示:

  1. {
  2. "require": {
  3. "easyswoole/easyswoole": "3.4.4",
  4. "easyswoole/phpunit": "^1.0",
  5. "easyswoole/orm": "^1.4"
  6. },
  7. "autoload": {
  8. "psr-4": {
  9. "App\\": "App/",
  10. "Tests\\": "tests/"
  11. }
  12. }
  13. }

执行

./vendor/bin/co-phpunit tests

或者执行

php easyswoole phpunit tests/DbTest.php