您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > PHPUnit
phpunit和php單元測(cè)試體驗(yàn)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2014/1/2 15:24:55 ] 推薦標(biāo)簽:php phpunit 單元測(cè)試

前段時(shí)間的一個(gè)項(xiàng)目中,由于開(kāi)發(fā)工程師時(shí)間比較緊,沒(méi)時(shí)間進(jìn)行單元測(cè)試。所以我臨時(shí)替補(bǔ)作單元測(cè)試。個(gè)人對(duì)phpunit了解不是很深入,本文只是對(duì)phpunit框架做簡(jiǎn)要介紹并寫(xiě)一些使用的體驗(yàn)。有誤之處還請(qǐng)多多指證。

  和其他的Xunit測(cè)試框架一樣,phpunit框架主要分為以下部分:

      TestCase --測(cè)試用例
      TestSuite --測(cè)試套件(我習(xí)慣稱(chēng)其為測(cè)試用例集)
      Assert--斷言(我習(xí)慣稱(chēng)其為驗(yàn)證方式)
      TestResult--測(cè)試結(jié)果

  對(duì)于testcase,phpunit中除了一般的testcase,還包含了Incompletetestcase(未完成的)和skiptestcase(跳過(guò)的測(cè)試用例)。

  testcase是單元測(cè)試的基本組成部分,每個(gè)testcase均包含以下部分:

    Setup()---測(cè)試前的初始化,執(zhí)行每個(gè)testMethod前均會(huì)執(zhí)行
    Teardown()--測(cè)試完成后恢復(fù),執(zhí)行完每個(gè)testMethod后均會(huì)執(zhí)行
    testMethod()--測(cè)試方法(測(cè)試點(diǎn))

寫(xiě)phpunit測(cè)試腳本時(shí),可以通過(guò)phpunit Skeleton 生成單元測(cè)試的腳本結(jié)構(gòu),然后在結(jié)構(gòu)中填寫(xiě)測(cè)試用例。

如果不用skeleton生成,自己寫(xiě)也很方便。

phpunit的測(cè)試文件包含以下部分:

引入必要的文件

       require 'x.php'--被測(cè)試的php文件
       rquire 'phpunitpathphpunitframework'---  phpunit的framewok文件

創(chuàng)建一個(gè)從phpunit frame繼承的類(lèi)

class XXtest extends PHPUnit_Framework_TestCase

 [初始化公共的參數(shù)]

  public $para1='';

  public $para2='';

寫(xiě)setup和teardown函數(shù)

 public function setUp() {}

 public function tearDown() {}

 注意,每運(yùn)行一個(gè)test的函數(shù),均會(huì)首先運(yùn)行setup,每運(yùn)行完一個(gè)函數(shù),均會(huì)運(yùn)行teardown. 寫(xiě)這2個(gè)函數(shù)時(shí)需要注意。

 下一步是寫(xiě)測(cè)試函數(shù)了,比如測(cè)試

  public function sum(a,b)

  {return a+b;}

 寫(xiě)測(cè)試函數(shù)時(shí)和測(cè)試用例是對(duì)應(yīng)的,我們首先測(cè)試正常情況下求和是否正確,testXX函數(shù)可以如下:

  public function testSumNormal ()                                                      
     {

  coding....

  assertSame(expectresult,actualcode,message)

}

 所有的測(cè)試函數(shù)均已test開(kāi)頭,一般通過(guò)assert..驗(yàn)證結(jié)果是否正確。

寫(xiě)完單元測(cè)試腳本后,下一步是執(zhí)行測(cè)試,簡(jiǎn)單的命令是:phpunit xxx.php 更加詳細(xì)的命令如下: phpunit --log-xml(log 文件格式) 文件路徑/文件名 --coverage-html(代碼覆蓋文件格式) 文件路徑/文件名 單元測(cè)試用例類(lèi) 單元測(cè)試文件 如:phpunit --log-xml path/createAlbumlog --coverage-html path/logs/ createAlbumtest createAlbum.php 命令執(zhí)行過(guò)程中,.--表示成功,e--代表error, f--代表失敗, 執(zhí)行完成后會(huì)顯示測(cè)試用例成功、失敗和出錯(cuò)情況。也可以通過(guò)查看log查看測(cè)試情況,coverage文件可以查看單元測(cè)試腳本對(duì)測(cè)試文件代碼覆蓋率情況。

 自己感覺(jué)單元測(cè)試過(guò)程中需注意以下幾個(gè)方面:

 1、各測(cè)試用例(testXXX)的數(shù)據(jù)耦合度要低。如果耦合度較高的話(huà),如果前一個(gè)測(cè)試用例失敗的話(huà),之后的測(cè)試用例會(huì)出現(xiàn)error,無(wú)法繼續(xù)。

 2、測(cè)試用例盡量覆蓋各邏輯分支,保證測(cè)試覆蓋率。

 3、測(cè)試用例設(shè)計(jì)和非單元測(cè)試的用例設(shè)計(jì)方法一致,針對(duì)一個(gè)方法測(cè)試需包含:正常測(cè)試、異常測(cè)試和邊界測(cè)試等。

 4、合理的利用setUp合tearDown, 每執(zhí)行一個(gè)testXX時(shí),都首先運(yùn)行setUP,執(zhí)行完testXX后,都會(huì)運(yùn)行tearDown, 因此可以把各個(gè)測(cè)試用例開(kāi)始都需要初始化且初始化值一樣的參數(shù)放到setUP中,而執(zhí)行完后需要unset的參數(shù)放到tearDown函數(shù)中。

 5、用phpunit skelon 生成測(cè)試框架時(shí),只有.php文件才可以,測(cè)試其他格式的文件如 inc格式文件無(wú)法生成的?梢孕薷奈募笤谏。

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd