如何使用 PhpStorm 測試與除錯?
很羨慕 Visual Studio 測試與除錯功能嗎?剛安裝好的 PhpStorm 只能算是一個文字編輯器,一旦設定了 PHP Interpreter、Xdebug 與 PHPUnit 之後,PhpStorm 就搖身一變成為全功能的 IDE,功能足以媲美 Visual Studio。
Version
PHP 5.6.10
PhpStorm 10.0.1
MAMP PRO 3.4
設定 Xdebug
MAMP PRO 預設已經有安裝 Xdebug,只是在 php.ini
並沒有啟動,必須手動啟動後,再加上一些設定。
1 | [xdebug] |
MAMP PRO 預設將 PHP 安裝在/Applications/MAMP/bin/php/phpX.X.XX/conf/php.ini
,選擇版本加以修改php.ini
。1 1若不知道該改哪一個php.ini
,可下php --ini
指令,看看目前系統正在使用哪一個php.ini
。
其中 [xdebug]
位於 php.ini
的最後一行,預設使用 ;
註解,將 ;
拿掉,並加上以上的 Xdebug 設定。
存檔後須重新啟動MAMP。
設定 Interpreter
PhpStorm -> Preferences -> Language & Frameworks -> PHP
預設 Interpreter 還沒設定,按 ...
設定PHP interpreter。2 2PHP 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
- 設定auloloader : 選擇
Use custom autoloader
,下方選擇專案路徑下的vendor/autoload.php
。 - 設定phpunit.xml : 在每個 Laravel 專案根目錄下都有一個
phpunit.xml
,這是 Laravel 幫我們客製化過的phpunit.xml
。
使用 PHPUnit 測試
對單一方法
在想要執行的 test method 內,按滑鼠右鍵選擇 Run XXX.XXX...
,或按熱鍵 ⌃ + ⇧ + R,可單獨測試某一個test method。3 3除了可在 PhpStorm 執行測試外,使用 Laravel Elixir 自動跑測試也是不錯的方式,詳細請參考如何在 Homestead 自動執行測試?
若測試成功,會在下方左側顯示 綠燈,失敗則 紅燈,下方右側則顯示 PHPUnit 所傳回的訊息。我們發現僅通過了 1 個測試。
對單一類別
在任意 test method 外,按滑鼠右鍵選擇 Run XXX...
,或按熱鍵 ⌃ + ⇧ + R,可單獨測試某一個 test class。
若測試成功,會在下方左側顯示 綠燈,失敗則 紅燈,下方右側則顯示 PHPUnit 所傳回的訊息。我們發現通過了該 test class 全部的 2 個測試。
全部測試
Run -> Run… 或按熱鍵 ⌃ + ⌥ + R。
選擇 tests->Run,tests
這是 Laravel 預設的測試目錄。
我們可以發現通過了整個範例的 5 個測試。
使用 Xdebug 除錯
對單一方法
在想要 debug 的 test method 內,按滑鼠右鍵選擇 Debug XXX...
,或按熱鍵 ⌃ + ⇧ + D,可單獨 debug 某一個 test method,只要執行過程中遇到中斷點就會停止。
對單一類別
在任意 test method 外,按滑鼠右鍵選擇 Debug XXX...
,或按熱鍵 ⌃ + ⇧ + D,可單獨 debug 某一個 test class,只要執行過程中遇到中斷點就會停止。
全部除錯
Run -> Run… 或按熱鍵 ⌃ + ⌥ + D。
選擇tests->Debug,tests
這是 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->Cover,tests
這是 Laravel 預設的測試目錄。4 4計算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,非常方便。