如何使用 PhpStorm 測試與除錯?

https://oomusou.io/phpstorm/debug-testing/

很羨慕 Visual Studio 測試與除錯功能嗎?剛安裝好的 PhpStorm 只能算是一個文字編輯器,一旦設定了 PHP InterpreterXdebug 與 PHPUnit 之後,PhpStorm 就搖身一變成為全功能的 IDE,功能足以媲美 Visual Studio。

Version


PHP 5.6.10
PhpStorm 10.0.1
MAMP PRO 3.4

設定 Xdebug


MAMP PRO 預設已經有安裝 Xdebug,只是在 php.ini 並沒有啟動,必須手動啟動後,再加上一些設定。

/Applications/MAMP/bin/php/php5.6.10/conf/php.ini
1
2
3
4
5
6
7
8
9
10
[xdebug]
zend_extension="/Applications/MAMP/bin/php/php5.6.10/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.profiler_enable=1

xdebug.profiler_output_dir="/Applications/MAMP/tmp"
xdebug.idekey=PHPSTORM

MAMP PRO 預設將 PHP 安裝在/Applications/MAMP/bin/php/phpX.X.XX/conf/php.ini,選擇版本加以修改php.ini11若不知道該改哪一個php.ini,可下php --ini指令,看看目前系統正在使用哪一個php.ini

其中 [xdebug] 位於 php.ini 的最後一行,預設使用 ; 註解,將 ; 拿掉,並加上以上的 Xdebug 設定。

存檔後須重新啟動MAMP。

設定 Interpreter


PhpStorm -> Preferences -> Language & Frameworks -> PHP
預設 Interpreter 還沒設定,按 ... 設定PHP interpreter。22PHP Interpreter每個專案都要重新設定一遍。

選擇 PHP 5.6.10 的路徑 : /Applications/MAMP/bin/php/php5.6.10/bin/php

若路徑正確,PhpStorm 會抓到 PHP 與 Xdebug 的版本。

從原本的 <no interpreter> 變成明確的 PHP (5.6.10)

設定 PHPUnit


PhpStorm -> Preferences -> Languages & Frameworks -> PHP -> PHPUnit

  1. 設定auloloader : 選擇 Use custom autoloader,下方選擇專案路徑下的 vendor/autoload.php
  2. 設定phpunit.xml : 在每個 Laravel 專案根目錄下都有一個 phpunit.xml,這是 Laravel 幫我們客製化過的 phpunit.xml

使用 PHPUnit 測試


對單一方法

在想要執行的 test method 內,按滑鼠右鍵選擇 Run XXX.XXX...,或按熱鍵 ⌃ + ⇧ + R,可單獨測試某一個test method。33除了可在 PhpStorm 執行測試外,使用 Laravel Elixir 自動跑測試也是不錯的方式,詳細請參考如何在 Homestead 自動執行測試?

若測試成功,會在下方左側顯示 綠燈,失敗則 紅燈,下方右側則顯示 PHPUnit 所傳回的訊息。我們發現僅通過了 1 個測試。

對單一類別

在任意 test method 外,按滑鼠右鍵選擇 Run XXX...,或按熱鍵 ⌃ + ⇧ + R,可單獨測試某一個 test class。

若測試成功,會在下方左側顯示 綠燈,失敗則 紅燈,下方右側則顯示 PHPUnit 所傳回的訊息。我們發現通過了該 test class 全部的 2 個測試。

全部測試

Run -> Run… 或按熱鍵 ⌃ + ⌥ + R。

選擇 tests->Runtests 這是 Laravel 預設的測試目錄。

我們可以發現通過了整個範例的 5 個測試。

使用 Xdebug 除錯


對單一方法

在想要 debug 的 test method 內,按滑鼠右鍵選擇 Debug XXX...,或按熱鍵 ⌃ + ⇧ + D,可單獨 debug 某一個 test method,只要執行過程中遇到中斷點就會停止。

對單一類別

在任意 test method 外,按滑鼠右鍵選擇 Debug XXX...,或按熱鍵 ⌃ + ⇧ + D,可單獨 debug 某一個 test class,只要執行過程中遇到中斷點就會停止。

全部除錯

Run -> Run… 或按熱鍵 ⌃ + ⌥ + D。

選擇tests->Debugtests 這是 Laravel 預設的測試目錄。

程式會停在設定中斷點的地方。

含 Coverage 測試


對單一方法

在想要計算 coverage 的 test method 內,按滑鼠右鍵選擇 Run XXX.XXX... with Coverage,可單獨測試某一個 test method 並計算 coverage。

對單一類別

在任意 test method 外,按滑鼠右鍵選擇 Run XXX.XXX... with Coverage,可單獨測試某一個 test class 並計算 coverage。

全部測試

Run -> Run… 或按熱鍵 ⌃ + ⌥ + R。

選擇 tests->Covertests 這是 Laravel 預設的測試目錄。44計算coverage非常耗時。

最後會在右方顯示整個專案的coverage。

Conclusion


  • 由於 PHP 是 script 的特性,很多人開發 PHP 都是使用 echo()var_dump()dd()來 debug,事實上 PhpStorm 搭配 Xdebug 之後,PHP 也能像 Java 與 C# 一樣,使用中斷點與 step by step 的方式來 debug。
  • PhpStorm 直接支援 PHPUnit,讓我們可以直接在 IDE 內執行測試,不用再透過 iTerm2 執行 PHPUnit,且可直接在 IDE 內顯示 coverage,非常方便。
posted @ 2018-09-20 13:39  haiwei.sun  阅读(210)  评论(0编辑  收藏  举报
返回顶部