如何愉快的在PhpStorm中進行PHPUnit單元測試和Xdebug斷點除錯?
阿新 • • 發佈:2019-02-01
前言
- 如果你想做個介面測試,但並不想公開內部介面
- 如果你只是想對自己封裝的某塊程式碼做個小測試
- 如果你想要編寫程式碼邊除錯,又不想操作
Postman
或前端的功能來呼叫API
- 本文暫時僅介紹在
Laravel
和Comoposer Library
專案中如何配置PHPUnit
參考文件
安裝
Xdebug
配置
配置 PhpStorm 的 PHP CLi
- 選擇 File -> Setting
- 搜尋
CLI
,左側選擇PHP
,點選+
新增一個 PHP 直譯器。
Windows
- 配置
php
執行程式 - 點選那個
同步的小圖示
successfully
就說明配置有效 - 指定 Xdebug 模組
- 配置
Ubuntu
配置 PHPUnit
- 選擇 File -> Setting,搜尋
test
,左側選擇Test Framework
,點選+
新增一個PHPUnit Local
。
- Composer Library 專案
- 選擇第一項:使用
composer autoloader
匯入配置 - 選擇你專案下的
vendor/autoload.php
- 點選那個
同步的小圖示
,如果看到successfully
就說明配置有效
- 選擇第一項:使用
- Laravel 專案
- 選擇第一項:使用
composer autoloader
- 選擇你專案下的
bootstrap/autoload.php
(或者選專案下的vendor/autoload.php
) - 點選那個
同步的小圖示
,如果看到successfully
就說明配置有效
- 選擇第一項:使用
- Composer Library 專案
配置 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
為字尾
- 編寫測試例方法,以
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 CLI
(php.exe
和xdebug.dll
) - 配置
PHPUnit
(autoload.php
) - 配置
phpunit.xml
(可選) - 新增
測試例
(測試類 和 測試方法)