zoukankan      html  css  js  c++  java
  • 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 CurlCurl;
     6 use EasySwooleEasySwooleCore;
     7 use EasySwooleEasySwooleLogger;
     8 use PHPUnitFrameworkTestCase;
     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()这个方法

     

           这是测试中实际要请求的地址,对应的路由我们提前在AppHttpControllerRouter.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/

     

    结果正常,符合预期

     

  • 相关阅读:
    springMVC(5)---导入excel文件数据到数据库
    springMVC(4)---生成excel文件并导出
    springMVC(3)---利用pdf模板下载
    springMVC(1)---@RequestMapping详解
    springMVC(2)---获取前段数据
    【JS】---5 JS通过事件隐藏显示元素
    【JS】---4用JS获取地址栏参数方法
    【功能代码】---3 JS判断字符串是否包含某个字符串
    基于maven的ssm框架整合
    java提高(9)---HashMap解析
  • 原文地址:https://www.cnblogs.com/hld123/p/13501003.html
Copyright © 2011-2022 走看看