站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

聊一聊PHP中單元測(cè)試工具PHPUnit的用法

單元測(cè)試是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。本篇文章帶大家了解一下php如何實(shí)現(xiàn)單元測(cè)試,介紹一下安裝單元測(cè)試工具PHPUnit并使用的方法。

聊一聊PHP中單元測(cè)試工具PHPUnit的用法

朋友,你聽說(shuō)過(guò)安。。。不是,寫過(guò)單元測(cè)試嗎。

單元測(cè)試是開發(fā)過(guò)程中必不可少的一環(huán),一個(gè)項(xiàng)目有良好的單元測(cè)試代碼,重構(gòu)的勇氣都大很多。這次寫一篇小文來(lái)介紹一下 PHP 的單元測(cè)試工具 PHPUnit 的使用。

PHPUnit 的使用并不難,這篇文章主要還是充當(dāng)一個(gè)引子,介紹基本概念和使用,有了這篇文章的基礎(chǔ)之后,去看官網(wǎng)的文檔就會(huì)更加順風(fēng)順?biāo)?/p>

安裝

安裝 PHPUnit 的方式很簡(jiǎn)單,使用 composer 可以一行代碼就可以安裝。

composer require --dev phpunit/phpunit

安裝之后,在 vendor/bin 目錄下有一個(gè) phpunit 的可執(zhí)行文件,這個(gè)就是 phpunit 本體了。假設(shè)我們項(xiàng)目的目錄結(jié)構(gòu)如下:

?  phpunit tree .  ├── controller ├── model ├── service ├── test └── vendor ├── composer.json

其中我們的單元測(cè)試代碼都放在 test 目錄下。使用 composer 來(lái)為我們解決 autoload 的問(wèn)題。

{   "autoload": {     "psr-4": {       "Controller\": "controller/",       "Model\": "model/",       "Service\": "service/",       "Test\": "test/",     }   }, }

如果你還不懂 composer 自動(dòng)加載的使用,可以參考這篇文章。最后執(zhí)行 composer dumpautoload -o 讓自動(dòng)加載生效。

到這里我們的安裝就算結(jié)束了。如果你使用 phpstorm 進(jìn)行開發(fā),那么你需要進(jìn)行如下的配置:

聊一聊PHP中單元測(cè)試工具PHPUnit的用法

這里指明了從哪里加載 PHPUnit,由于我們使用 composer 安裝,所以,這里的文件選擇 composer 生成的 autoload.php 文件即可。

使用

好了,假設(shè)我們現(xiàn)在進(jìn)行開發(fā),在 service 目錄中添加了一個(gè) CalculateService 的文件,并且編寫了一個(gè) abs 的函數(shù)。

namespace Service;  class CalculateService {     public function abs($num)     {         return abs($num);     } }

現(xiàn)在我們對(duì) abs 函數(shù)進(jìn)行單元測(cè)試,PHPUnit 規(guī)定了一個(gè)測(cè)試類必須遵守如下的規(guī)定:

  • 單元測(cè)試類名必須以 Test 結(jié)尾,必須繼承 PHPUnitFrameworkTestCase 基類。
  • 每個(gè)測(cè)試函數(shù)必須以 test 開頭。

上面的規(guī)定是必須遵守的,如果代碼沒(méi)有遵守規(guī)定 PHPUnit 不會(huì)把他當(dāng)做單元測(cè)試代碼。除了以上的兩條,還有一些良好的編碼習(xí)慣可以參考:

  • 單元測(cè)試代碼都放在 test 目錄下。
  • 每個(gè)單元測(cè)試類以被測(cè)試的類名開頭。例如被測(cè)試類為 CalculateService,那么單元測(cè)試類應(yīng)該為 CalculateServiceTest。
  • 每個(gè)單元測(cè)試函數(shù)應(yīng)該為被測(cè)試函數(shù)名結(jié)尾。例如被測(cè)試函數(shù)為 abs,那么單元測(cè)試函數(shù)應(yīng)該為 testAbs。

根據(jù)上面的規(guī)范,編寫單元測(cè)試代碼

class UserServiceTest extends PHPUnitFrameworkTestCase {     public function testAbs()     {         $userService = new ServiceCalculateService();         $this->assertEquals(4, $userService->abs(4));     } }

在上面的測(cè)試代碼中,調(diào)用了我們要測(cè)試的函數(shù) abs,然后斷言 $userService->abs(4) 的結(jié)果為 4。在 phpstorm 中直接在 testAbs 函數(shù)處右鍵選擇 run UserServiceTest 執(zhí)行:

聊一聊PHP中單元測(cè)試工具PHPUnit的用法

發(fā)現(xiàn)在控制臺(tái)會(huì)輸出如下內(nèi)容

Time: 17 ms, Memory: 4.00MB  OK (1 test, 1 assertion)

表明 abs 通過(guò)了 $userService->abs(4) == 4 的測(cè)試用例。這里注意一點(diǎn),這里并不表明 abs 函數(shù)已經(jīng)通過(guò)測(cè)試,一個(gè)良好的測(cè)試應(yīng)該包含多個(gè)測(cè)試用例來(lái)覆蓋盡可能多的可能性。

現(xiàn)在 PHPUnit 基本的單元測(cè)試已經(jīng)運(yùn)行成功了,在 PHPUnit 的文檔中,有

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
亚洲精品亚洲人成在线观看| 一本一本久久a久久精品综合麻豆| 精品国产一区二区三区无码| 亚洲国产精品乱码一区二区| 国产在线观看高清精品| 精品不卡一区中文字幕| 手机看片福利永久国产日韩| 1313午夜精品理论片| 午夜精品久久久久成人| 国内揄拍国内精品对白86| 国产精品免费精品自在线观看| 精品无码久久久久国产| 久久青草精品38国产免费| 国产在线拍揄自揄视精品不卡| 大伊香蕉精品一区视频在线| 亚洲精品动漫人成3d在线| 老司机精品视频免费| 日韩精品无码久久一区二区三| 日韩在线免费电影| 日韩高清一区二区| 一区二区三区日韩精品| 国产日韩在线视频免费播放| 日韩乱码人妻无码中文视频| 国产精品久久久久久久久99热| 老牛精品亚洲成av人片| 麻豆成人精品国产免费| 国产精品无码一区二区在线观| 亚洲爆乳精品无码一区二区| 欧洲精品成人免费视频在线观看| 久久亚洲精品无码av| 国内精品福利在线视频| 精品伊人久久久久网站| 国产精品国产三级国产av剧情 | 久久久久久久国产精品电影| 国产精品水嫩水嫩| 久久精品久久精品久久精品| 亚洲国产精品无码AAA片| 久久国产精品99久久久久久牛牛| 久久久久亚洲精品美女| 人妻AV一区二区三区精品 | 老牛精品亚洲成av人片|