1. 程式人生 > >如何愉快的在PhpStorm中進行PHPUnit單元測試和Xdebug斷點除錯?

如何愉快的在PhpStorm中進行PHPUnit單元測試和Xdebug斷點除錯?

前言

  • 如果你想做個介面測試,但並不想公開內部介面
  • 如果你只是想對自己封裝的某塊程式碼做個小測試
  • 如果你想要編寫程式碼邊除錯,又不想操作 Postman 或前端的功能來呼叫 API
  • 本文暫時僅介紹在 LaravelComoposer Library 專案中如何配置 PHPUnit

參考文件

安裝

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 (可選)
  • 新增 測試例(測試類 和 測試方法)