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/

     

    结果正常,符合预期

     

  • 相关阅读:
    Lucene in action 笔记 case study
    关于Restful Web Service的一些理解
    Lucene in action 笔记 analysis篇
    Lucene in action 笔记 index篇
    Lucene in action 笔记 term vector
    Lucene in action 笔记 search篇
    博客园开博记录
    数论(算法概述)
    DIV, IFRAME, Select, Span标签入门
    记一个较困难的SharePoint性能问题的分析和解决
  • 原文地址:https://www.cnblogs.com/hld123/p/13501003.html
Copyright © 2011-2022 走看看