您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“PHPUnit在PHP項目中如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“PHPUnit在PHP項目中如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
單元測試介紹
單元測試是分別對程序的單元(方法, 函數)進行測試,判斷執行結果是否符合預期
單元測試能協助開發者什么?
1.確保單元的執行結果
2.盡早發現程序中的錯誤
3.修改程序, 更加有信心
PHPUnit 是 PHP 程式語言中最常見的單元測試 (unit testing) 框架,PHPUnit 是參考 xUnit 架構利用 PHP 實作出來。
安裝PHPUnit
# 項目中安裝 $ composer require --dev phpunit/phpunit # 下載到本地 $ wget https://phar.phpunit.de/phpunit-9.phar
使用項目中安裝可以在項目中直接運行, 無需太多配置, 將 phar 下載到非項目文件夾, 可以減少項目代碼的體積, 我一般采用下載到本地, 然后多個項目公用一個 phpunit.phar
, 減少項目體積, 不過需要在 IDE中增加更多配置
配置autoload
添加下面的代碼到composer.json PackageName是項目的名稱,src是包含PHP class文件的文件夾地址,項目根目錄下的子文件夾。
... "autoload": { "psr-4": { "PackageName\\": "src/", "PackageName\\Tests": "tests/" } }, ...
設置PHPUnit
在phpstorm中 Languages & Frameworks >PHP >Test Frameworks
根據不同的加載方式設置不同的配置
如果是項目額外加載, 則需要把 phpunit 所在的文件夾作為 library 加入項目, 便于代碼提示 Preferences | Languages & Frameworks | PHP
, 加入 phpunit 文件夾
編寫PHPUnit測試
針對類 Example
的測試寫在類 ExampleTest
中, ExampleTest
繼承自 TestCase
對于方法的測試命名為 test*
的公用方法
在測試方法內,類似于 assertEquals()
的斷言方法用來對實際值和預期值的匹配做出驗證
ArrayTest 用 PHPUnit 測試數組操作
<?php use PHPUnit\Framework\TestCase; class ArrayTest extends TestCase { public function testPushAndPop() { $stack = []; $this->assertCount(0, $stack); $stack[] = 'foo'; $this->assertEquals('foo', $stack[count($stack) - 1]); $this->assertCount(1, $stack); $this->assertEquals('foo', array_pop($stack)); $this->assertCount(0, $stack); } }
在 IDE 中運行
點擊方法名稱
右鍵測試類
右鍵測試文件夾
PHPUnit 斷言
laravel 中除了標準的 PHPUnit 斷言(assertEquals()
, assertContains()
, assertInstanceOf()
, …更多斷言請看https://phpunit.readthedocs.io/zh_CN/latest/assertions.html?highlight=assertTrue#
)之外, 還存在很多允許測試 web 應用的檢測項目
assertPageLoaded($uri, $message = null)
檢測最近的頁面是否被加載, 如果不存在 url / message 時候會報錯
assertResponseOk()
是否頁面相應OK
assertReponseStatus($code)
是否響應指定的code
assertViewHas($key, $value = null)
視圖中是否存在指定的數據
assertViewHasAll($bindings)
視圖中是否存在指定的一系列數據
assertViewMissing($key)
指定視圖中是否不存在這個數據
assertRedirectedTo($uri, $with = [])
檢測是否重定向到指定的uri
assertRedirectedToRoute($name, $parameters = [], $with = [])
是否客戶端重定向到指定的路由
assertRedirectedToAction($name, $parameters = [], $with = [])
是否重定向到 action
assertSessionHas($key, $value = null)
session 中是否存在 key/ value
assertSessionHasAll($bindings)
session 中是否存在指定的 kv
assertSessionHasErrors($bindings = [])
session 是否存在錯誤
assertHasOldInput()
session 中是否存在以前的數據
示例 xml 文件
phpunit.xml at 9.x · laravel
<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" colors="true"> <testsuites> <testsuite name="Unit"> <directory suffix="Test.php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Feature</directory> </testsuite> </testsuites> <coverage processUncoveredFiles="true"> <include> <directory suffix=".php">./app</directory> </include> </coverage> <php> <env name="APP_ENV" value="testing"/> <env name="BCRYPT_ROUNDS" value="4"/> <env name="CACHE_DRIVER" value="array"/> <!-- <env name="DB_CONNECTION" value="sqlite"/> --> <!-- <env name="DB_DATABASE" value=":memory:"/> --> <env name="MAIL_MAILER" value="array"/> <env name="QUEUE_CONNECTION" value="sync"/> <env name="SESSION_DRIVER" value="array"/> <env name="TELESCOPE_ENABLED" value="false"/> </php> </phpunit>
安裝 xdebug / Phpunit
# 安裝 xdebug $ pecl install xdebug
啟用 xdebug
# php.ini 文件 xdebug.mode = coverage
讀到這里,這篇“PHPUnit在PHP項目中如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。