如何愉快的在PhpStorm中进行PHPUnit单元测试和Xdebug断点调试?

本作品系 原创, 采用 《署名-非商业性使用-禁止演绎 4.0 国际》 许可协议

image.png

博文内容

前言

  • 如果你想做个接口测试,但并不想公开内部接口
  • 如果你只是想对自己封装的某块代码做个小测试
  • 如果你想要编写代码边调试,又不想操作 Postman 或前端的功能来调用 API
  • 本文暂时仅介绍在 LaravelComoposer Library 项目中如何配置 PHPUnit

参考文档

如何愉快的在PhpStorm中进行PHPUnit单元测试和Xdebug断点调试?https://segmentfault.com/a/1190000016323574
如何愉快的在PhpStorm中进行PHPUnit单元测试和Xdebug断点调试?https://blog.csdn.net/RobotYang123/article/details/82533080
——
PHPUnit 手册:http://www.phpunit.cn/manual/current/zh_cn/index.html
phpunit assert断言分类整理 :https://www.cnblogs.com/ningskyer/articles/5744760.html

安装

Xdebug

配置

配置 PhpStorm 的 PHP CLi

  • 选择 File -> Setting


    PhpStorm Setting
  • 搜索 CLI ,左侧选择 PHP,点击 + 新增一个 PHP 解释器。
    • Windows
      • 配置 php 执行程序
      • 点击那个 同步的小图标,如果看到 successfully 就说明配置有效
      • 指定 Xdebug 模块


        Windows下配置PhpStorm PHP CLI
    • Ubuntu
      Ubuntu下配置PhpStorm PHP CLI

配置 PHPUnit

  • 选择 File -> Setting,搜索 test ,左侧选择 Test Framework,点击 + 新增一个 PHPUnit Local
    新增一个PHPUnit Local
    • Composer Library 项目
      • 选择第一项:使用 composer autoloader 导入配置
      • 选择你项目下的 vendor/autoload.php
      • 点击那个 同步的小图标,如果看到 successfully 就说明配置有效
        配置 composer autoloader
    • Laravel 项目
      • 选择第一项:使用 composer autoloader 导入配置
      • 选择你项目下的 bootstrap/autoload.php(或者选项目下的 vendor/autoload.php
      • 点击那个 同步的小图标,如果看到 successfully 就说明配置有效
        配置 composer autoloader

配置 phpunit.xml

  • 在你的项目根目录下新建 phpunit.xml 文件(但奇怪的是我在 PhpStorm 删除这个文件,也可以执行单元测试,猜测可能是 phpunit.xml 配置文件是可选的)
<?xml version="1.0" encoding="UTF-8"?>
<!--bootstrap指定启动测试时, 先加载vendor/autoload.php-->
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">

    <!--testsuite指定测试文件的目录-->
    <testsuite>
        <directory suffix="Test.php">./tests</directory>
    </testsuite>

    <!--filter过滤依赖文件的位置-->
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./src</directory>
        </whitelist>
    </filter>
</phpunit>
  • 当然这个 phpunit.xml 只是基本配置,还有其他高级配置请自行百度

新增测试例

  • 在你的项目根目录下新建 tests 目录
  • tests 目录下新建 phpunit 测试类,以 Test.php 为后缀
    新建 phpunit 测试类

    新建PHPunit测试类-命名
  • 编写测试例方法,以 test 开头
<?php
/**
 * Created by PhpStorm.
 * User: robot
 * Date: 2018/9/8
 * Time: 23:54
 */

namespace HonorSdk\Tests;

use PHPUnit\Framework\TestCase;

class HelloTest extends TestCase
{
    public function testHello()
    {
        $expect = 'hello world'; //期待结果
        $result = $this->requestApi(); //请求api 或 调用 service 后返回的结果
        $this->assertEquals($expect, $result); //使用断言方法 比较结果值
    }

    //假装请求数据
    private function requestApi()
    {
        echo $date_1 = date('Y-m-d H:i:s');
        echo "<br>";;
        echo $date_2 = date('Y-m-d H:i:s');
        echo "<br>";;
        echo $date_3 = date('Y-m-d H:i:s');
        echo "<br>";;
        echo $date_4 = date('Y-m-d H:i:s');
        echo "<br>";;
        echo $date_5 = date('Y-m-d H:i:s');
        echo "<br>";;
        $j = 0;
        for ($i = 0; $i < 10; $i++) {
            $j = $i * 2;
            $i = $i + 2;
            echo $i;
            echo "<br>";
            echo $j;
            echo "<br>";
        }
        return 'hello world';
    }
}
  • 打上断点,然后在要测试的方法名上右键,选择 Debug 这个方法
    开始执行测试例
  • 第一次可能会弹出让你选择测试范围的配置界面,这里我们只测试指定方法,所以选择了 Method
    选择测试范围
  • 测试结果
    • 测试例执行 Xdebug 的流程


      测试例执行Xdebug的流程
    • 测试例执行成功的返回信息


      测试例执行成功的返回信息

调试快捷键

  • F7 通过当前行,进入下一行,如果该行是方法,则进入方法体
  • F8 通过当前行,进入下一行,如果该行是方法,也直接进入下一行,不进入方法体
  • F9 通过整个流程,全部顺序执行,除非遇到下一个断点

要点总结

  • 配置 PHP CLIphp.exexdebug.dll
  • 配置 PHPUnitautoload.php
  • 配置 phpunit.xml (可选)
  • 新增 测试例(测试类 和 测试方法)

关于我的

个人简介

属性 属性值
昵称 大绵羊、大绵羊rbt、rbtyang、RobotYang
格言 博观约取,厚积薄发;刻意练习、日益精进
后端 Go、PHP、Python
前端 Vue、Angular、Uniapp、公众号、小程序
数据 MySQL、Redis/Memcached、MongoDB
博客 CSDN   思否   掘金   简书   知乎   开源中国   订阅号(RobotYang123)  

期望赞赏

万水千山总是情,赞不赞赏都可行 ( ̄▽ ̄)~■干杯□~( ̄▽ ̄)

赞赏码
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345