PHPUnit的實際應用

最近研究的了一下php的單元測試,使用的測試工具是phpunit,下面來分享一下個人經驗。php

  • 首先要說爲何要用單元測試

不少人覺得寫代碼寫完沒bug能運行就好了html

沒bug

其實不是,咱們寫代碼是爲了什麼,確定是爲了可以重複運行。經過良好的API設計分割需求,那麼在重構的時候API就基本不用變化,測試文件也不用重寫。那麼在之後重構的時候,只要unit test覆蓋的夠好,基本跑一遍就知道有沒有改爲傻逼。能夠節省大量的時間。java

異常

  • 代碼覆蓋

這裏提到了一個詞,代碼覆蓋。在單元測試的時候咱們常常經過代碼覆蓋率來判斷模塊是否測試的完整。那麼什麼是代碼覆蓋率呢?覆蓋率一般做爲一個參考值來反應應用的質量。覆蓋率反應測試腳本對應用的覆蓋狀況。以單元測試覆蓋率爲例,經過必定的工具好比emma(針對java應用),能夠看到這些單測case對於應用的類覆蓋,行覆蓋,方法覆蓋,塊覆蓋(能夠理解爲分支覆蓋)狀況。經過不斷提高覆蓋率的值,對於關鍵功能或者代碼路徑的覆蓋,可以有效的保證應用迭代過程當中,應用的質量。下面是一段針對php的單元測試代碼覆蓋率報告圖片(綠色爲測試覆蓋到的代碼,紅色的表明沒有覆蓋到)。bootstrap

1

  • 安裝

首先確定是安裝測試工具,這裏我使用的是windows系統。先去官網上找到對應的phpunit版本下載,目前官網首頁上有三個版本提供下載windows

 

這裏必定要先確認本地的php項目的版本,好比個人環境是PHP5.5的,可是我第一次安裝時裝的是PHPunit5.7版本,結果致使按照教程測試的時候一直提示語法錯誤。3函數

 

下載完成後能夠按照官方手冊的指導進行安裝,這裏放上PHPunit4.8版本的地址工具

  • 代碼內容

總體邏輯來講,使用PHPunit一共分爲兩個文件夾,即功能文件夾和測試文件夾。單元測試

 

舉例來講。首先是要測試的功能模塊文件,如圖所示是adt_coupon.php文件學習

而後是測試文件adt_couponTest.php測試

在這裏能夠看到,我定義的類NameTest在繼承phpunit自帶函數的時候,在前面加了一個反斜槓」\」,這是在4.8版本中的寫法,和新版中的寫法有所不一樣。同時,在咱們的功能文件中所須要獲取的傳入的參數,如$_REQUST[‘member_name’]等,咱們能夠在測試文件中使用phpunit自帶的setup方法,在其中定義。

在index.php裏,主要放的是咱們須要用到的一些引用文件路徑

index

autoload.php是咱們在執行自動化單元測試時的主要文件,在adt_couponTest中調用的一些方法,咱們須要在這裏進行生聲明

這樣最基本的單元測試內容就完成了。

  • 使用

使用PHPunit測試,首先要經過命令行的形式進入到以前所說的主目錄,如圖

命令行地址

以後執行自動測試命令就能夠了

phpunit –bootstrap mobile/control/autoload.php test/tests

這裏能夠看到命令分爲四部分,第一部分是phpunit,第二部分是–bootstrap,這兩部分是不變的,第三部分是mobile/control/autoload.php,這裏是要指明autoload.php文件所在的路徑,第四部分是測試文件所在的路徑

  • 常見問題

  1. 在執行測試後,若是返回的是如——Class Error: xsctx\agg\language.isn’t exists!,這種問題,說明沒有把須要調用的函數加進到命名空間中去,這時咱們要找到調用函數所在的文件,而後在頭部把本身定義的命名空間加上。
  2. 在執行測試後,若是返回的是如——Fatal error: Class ‘Language’ not found in F:\BaiduYunDownload\111\server-php\core\framework\function\core.php on line 123 ,說明缺乏引用文件。
  3. 在執行測試後,若是返回的是如——Fatal error: Call to undefined function C,也是缺乏引用文件。

有興趣的能夠參考微軟MVP寫的一篇文章進行學習 30天快速上手TDD

相關文章
相關標籤/搜索