PHPUnit整合ThinkPHP的庫TPUnit

x3d發表於2016-03-21

專案地址:https://github.com/web3d/TPUnit

ThinkPHP PHPUnit框架整合,基於TP3.2,建議PHP 5.4以上環境。

單元測試應該是提高PHP編碼質量的解決之道,但應該沒有多少PHP團隊在用單元測試改善開發過程,更不用提TDD開發方法。

不可否認ThinkPHP框架在國內PHP圈子中的“至高”地位,所以才有這次整合嘗試,同時也在團隊中進行推行相關實踐。

1. 初始配置

為了減少學習成本,建議使用像Netbeans這樣的IDE來設定PHPUnit的基本環境。

通過Netbeans的操作介面,可以直接瞭解PHPUnit使用過程的一些核心概念。

  • 基於Netbeans的PHPUnit環境配置
  • git clone git@github.com:web3d/TPUnit.git 到ThinkPHP的Vendor目錄下
  • 給ThinkPHP框架打補丁 將ThinkThink類的start方法最後一行改為 !constant(`NO_NEED_RUN_APP`) && App::run();,同時 ThinkApp::init() 方法 !constant(`NO_NEED_RUN_APP`) && Dispatcher::dispatch();(注:由於建立測試檔案的命令是在Cli環境執行,與TP的Cli模式處理衝突,臨時解決方案)

2. 開始

將TPUnit中demo目錄下的bootstrap.php檔案複製到你的tests目錄下。

在上一步的配置過程中,有一個“使用引導”的地方記得勾選並指定bootstrap.php檔案所在目錄。

由於ThinkPHP框架中坑爹的.class.php字尾名,導致NB 8.1以後版本雖然可以生成測試方法骨架,但檔名比較彆扭,形式如ClsXYZ.classTest.php。

3. 支援的特性

3.1 基本的UnitTest

最經典的例子:

參看上面的參考配置文件中:基於Netbeans的PHPUnit環境配置

3.2 DB UnitTest

參看本專案demo目錄 /demo/Application/Common/Model/UrlModelTest.php 檔案。

DBUnit主要由四種斷言構成,目前TPUnit已支援TP對這四種斷言的支援:

  • 對錶中資料行的數量作出斷言
  • 對錶的狀態作出斷言
  • 對查詢的結果作出斷言
  • 對多個表的狀態作出斷言

具體請檢視https://github.com/web3d/TPUnit/blob/master/demo/Application/Common/Model/UrlModelTest.php

其中,{{%url}} 是從Yii2框架中引入的表名字首替換方案,{{和}}是表名界定符,%是表名字首佔位符。

4. 修訂日誌:

  • [修復] 基於NB已經可以建立TP框架下的測試檔案,但檔名與類名不對應,修復了測試類自動載入機制 [2016-05-20]

實踐記錄


相關文章