官網地址:https://phpunit.de/getting-started-with-phpunit.htmlphp
一、能夠經過命令操控測試腳本html
二、能夠測試性能java
三、能夠測試代碼覆蓋率thinkphp
四、能夠自動化的更新測試用例的參數數據api
五、各類格式的日誌數組
Codemarkdown
src/Email.php
架構
<?php final class Email { private $email; private function __construct($email) { $this->ensureIsValidEmail($email); $this->email = $email; } public static function fromString($email) { return new self($email); } public function __toString() { return $this->email; } private function ensureIsValidEmail($email) { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { throw new InvalidArgumentException( sprintf( '"%s" is not a valid email address', $email ) ); } } }
Test Code併發
tests/EmailTest.php
app
<?php use PHPUnit\Framework\TestCase; final class EmailTest extends TestCase { public function testCanBeCreatedFromValidEmailAddress() { $this->assertInstanceOf( Email::class, Email::fromString('user@example.com') ); } public function testCannotBeCreatedFromInvalidEmailAddress() { $this->expectException(InvalidArgumentException::class); Email::fromString('invalid'); } public function testCanBeUsedAsString() { $this->assertEquals( 'user@example.com', Email::fromString('user@example.com') ); } }
a、測試的代碼是在test文件夾下的,和源碼不是在同一個文件夾下
b、測試的類或者方法都加有test字樣
c、有一些經常使用的測試函數,好比:
assertTrue 爲判斷是否真
assertFalse 爲判斷是否假
assertGreaterThan爲判斷是否大於
assertLessThanOrEqual判斷是否小於或等於
assertEquals爲判斷是否相等
thinkphp的開發手冊的雜項裏面有教怎麼使用單元測試,
thinkphp5的單元測試也是用的phpunit,這張圖能夠說明
因此關於單元測試的具體方法能夠去phpunit官方文檔裏面看
咱們能夠直接在命令行下面運行單元測試
看tp的根目錄下是否有tests文件夾
在開發手冊的評論下找到的
快速入門 · thinkphp單元測試手冊|thinkphp 單元測試|thinkphp 測試 · 看雲
https://www.kancloud.cn/code7/tpunit/220874
一、它是一款輕量級的PHP測試框架,地址:http://www.phpunit.cn
二、手冊:http://www.phpunit.cn/manual/5.7/zh_cn/installation.html
一、能夠經過命令操控測試腳本
二、能夠測試性能
三、能夠測試代碼覆蓋率
四、能夠自動化的更新測試用例的參數數據
五、各類格式的日誌
一、 通常被測試類的後面加上」Test」,好比要測試的類爲Array,則測試用例的命名爲ArrayTest。
二、測試類ArrayTest繼承於PHPUnit_Framework_TestCase
三、測試方法必須爲public權限,都是test開頭,或者你也能夠選擇給其加註釋@test來代表該函數爲測試函數
四、經過斷言方法來對實際值和預期值進行斷言,斷言方法能夠參照手冊:http://www.phpunit.cn/manual/5.7/zh_cn/appendixes.assertions.html
快速入門:
class ArrayTest extends PHPUnit_Framework_TestCase //測試用例運行後執行 // 斷言數組$fixture中元素的數目是0。 } |
命令行啓動測試用例:
phpunit 測試文件名,此處爲要測試ArrayTest.php文件
phpunit ArrayTest.php PHPUnit 5.7.5 by Sebastian Bergmann and contributors. .. 2 / 2 (100%) Time: 138 ms, Memory: 3.25MB OK (2 tests, 4 assertions) |
記錄測試日誌:
日誌多種格式:http://www.phpunit.cn/manual/5.7/zh_cn/textui.html#textui.clioptions
phpunit ArrayTest.php --log-tap log.txt TAP version 13 |
能夠參考:http://www.phpunit.cn/manual/current/zh_cn/code-coverage-analysis.html
能夠經過配置phpunit.xml設置須要測試的代碼路徑或文件
例如:phpunit.xml的配置(放在項目根目錄)
一、經過生成html頁面查看代碼覆蓋率
經過執行命令:phpunit --coverage-html ./coverage ./src/test
命令解釋:
覆蓋率結果:
能夠看到目錄裏每一個文件的覆蓋率:
還能夠清晰的看到每個文件代碼覆蓋率:
二、經過生成的text文件查看代碼覆蓋率
經過執行命令:phpunit --coverage-text ./src/test > test.log
命令解釋:
覆蓋率結果:
能夠清晰的看到總覆蓋率和每一個文件的覆蓋率。
覆蓋率計算問題:
一、類:只有類中全部代碼都執行了,覆蓋率才爲100%;
二、方法:類中的方法每一行都執行了,覆蓋率纔算100%。例如:類中有5個方法,有兩個方法每一行執行了,覆蓋率爲:40%;
三、行:每一行代碼都執行了就是100%;
參考:PHPUnit簡介及使用 - 浮.塵 - 博客園
https://www.cnblogs.com/kccdzz/p/6763735.html
1、什麼是測試?測試的重要性?
開發者在撰寫程式的時候,程式不大可能會沒有問題,因此一般就須要驗證程式的執行是否是符合預期。測試程式能用來驗證程式程式的運做是否是正常的,並發現程式中的錯誤,以增長軟體品質。
下面是一個活動報名的系統:
這一個活動報名系統主要提供使用者報名活動,在報名活動內還有一些子功能,像是「限制活動報名人數」,若是是這一個子功能,該如何測試呢?
直覺想到可能就須要有 20 個以上的使用者,而後讓這個些使用者分別來報名活動,若是沒超過限制的人數,使用者就能繼續報名,反之,超過了限制人數的話,使用者就沒法繼續報名了。說到這裏,會以爲這是什麼測試!
先分析一下,照上面的方法進行測試會有什麼問題:
1.測試案例一多,會花太多時間
這時候,若是再增長報名截止日期的測試,這樣又須要再對報名功能測試一次。
2.改了程式碼以後,須要再作一次測試
往後維護時,會須要再次修改程式碼,可是,改了程式碼以後,該如何驗證修改後的程式運做上是沒問題的?因此,可能又要再次從頭作一次測試。
3.與其餘程式混在一塊兒測試
要執行報名功能的程式碼,要透過 view 的程式去呼叫。可是,這樣作測試的時候,若是測試失敗,就必須花時間去找出是報名的程式出問題,仍是 view 程式。
那該如何解決這些問題呢?針對開發者來講,須要一個能夠自動化、重複的、獨立的測試。
2、單元測試
單元測試是分別對程式的單元,例如:函式 (function)、方法 (method),進行測試,測試時會判斷單元的執行結果是否是有符合預期。
從上圖能夠看到,撰寫了Event 類別提供了兩個方法,reserve()、unreserve(),也就是目標程式。
接着透過 EventTest 的兩個測試案例,testReserve() 與 testUnreserve() 分別來對 Event 類別中的兩個類別方法執行測試,測試的結果會在測試案例中驗證,若是驗證經過,表示測試就成功了!
單元測試能協助開發者什麼?
1.確保單元的執行結果
這一點蠻以爲就能夠了解到,單元測試能協助驗證目標程式的執行結果。
2.儘早發現程式中的錯誤
由於單元測試是在開發的時候就進行的,因此能發現程式中存在的問題。
沒使用單元測試的時候,寫好了一份程式,可是,這份程式碼須要與其餘程式碼整合纔有辦法運做。因此就須要等整個程式開發的差很少的時候,才能對程式進行測試,在測試出現問題的時候,會花許多時間來釐清是那一份程式致使的問題。
若是使用單元測試,就能在寫好了一份程式以後進行單元測試,而不用等到以後纔對程式測試。
3.修改程式,更加有信心
程式寫好了,須要維護、修 bug,若是修改了程式碼後,能肯定修改後的程式與以前的正常運做是同樣的嗎?單元測試能協助修改程式後,對程式執行測試,若是測試過了,表示程式的運做是正常的,測試失敗的話,可能須要再回頭修改程式。
4.測試即文件
在撰寫測試的時候,會對單元所提供的功能進行驗證,因此,除了能透過程式來了解單元的運做外,也能用所撰寫的單元測試來知道,被測試的單元有哪些運做及功能。
在開發的時候,會撰寫一些文件來做爲軟體的文件,在實際上,有時候那些文件並不必定會隨着程式變動而修改,到後來會變成以前所作的文件跟程式是不一樣步的。
由於,單元測試的程式會對目標程式進行驗證,因此,測試能避免掉傳統文件所形成的程式與文件不一樣步的問題。
3、簡介 PHPUnit
PHPUnit 是 PHP 程式語言中最多見的單元測試 (unit testing) 框架,PHPUnit 是參考 xUnit 架構利用 PHP 實做出來。
爲何要使用 PHPUnit 來測試呢?雖然,要作單元測試能夠本身寫程式來測試, 可是 PHPUnit 提供了一些測試時經常使用的 library 及解決測試時會遇到問題的方法,因此咱們會使用 PHPUnit 來作單元測試。
參考:第一次用 PHPUnit 寫測試就上手(上) - Anlior的博客 - CSDN博客
https://blog.csdn.net/Anlior/article/details/78627134?locationNum=7&fps=1
先安裝composer,如以前電腦環境有安裝composer可跳過1,2步驟
1.打開php.ini,找到;extension=php_openssl.dll,去掉前面的分號,保存並重啓Apache便可。
2.百度搜索安裝Composer-Setup.exe
3.打開Git Bash
4.
5.安裝完成後項目目錄會多出一個tests文件夾
6.
7.單元測試方法,模型
8.結果顯示返回正確狀況
返回錯誤狀況
測試函數,更多測試請看幫助文檔
assertTrue 爲判斷是否真
assertFalse 爲判斷是否假
assertGreaterThan爲判斷是否大於
assertLessThanOrEqual判斷是否小於或等於
assertEquals爲判斷是否相等
tp5單元測試使用幫助文檔http://www.kancloud.cn/manual/thinkphp5/182511
參考:Tp5 單元測試 - liuxin_0725的專欄 - CSDN博客
https://blog.csdn.net/liuxin_0725/article/details/53215411
這後面或許不該該加 v1.0
擴展裏面的phpunit
安裝先後擴展目錄vendor對比:
快速入門 · thinkphp單元測試手冊|thinkphp 單元測試|thinkphp 測試 · 看雲https://www.kancloud.cn/code7/tpunit/220874