PHPUnit简介及使用(thinkphp5的单元测试安装及使用)
PHPUnit簡介及使用(thinkphp5的單元測試安裝及使用)
一、總結
一句話總結:直接google這個phpunit(how to use phpunit),然后去官網看使用樣例和手冊,那些英文和內容以看懂的,不要有抵觸情緒
官網地址:https://phpunit.de/getting-started-with-phpunit.html
?
1、為什么要用PHPUnit?
測試性能
1、可以通過命令操控測試腳本
2、可以測試性能
3、可以測試代碼覆蓋率
4、可以自動化的更新測試用例的參數數據
5、各種格式的日志
?
2、官方phpunit使用實例?
Code
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
<?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'));} }?
?
3、單元測試的特點(比如phpunit,java的junit)?
文件夾
test
測試函數
a、測試的代碼是在test文件夾下的,和源碼不是在同一個文件夾下
b、測試的類或者方法都加有test字樣
c、有一些常用的測試函數,比如:
assertTrue 為判斷是否真
assertFalse 為判斷是否假
assertGreaterThan為判斷是否大于
assertLessThanOrEqual判斷是否小于或等于
assertEquals為判斷是否相等
?
?
4、thinkphp如何添加單元測試?
手冊 雜項
thinkphp的開發手冊的雜項里面有教怎么使用單元測試,
thinkphp5的單元測試也是用的phpunit,這張圖可以說明
所以關于單元測試的具體方法可以去phpunit官方文檔里面看
?
5、thinkphp的單元測試如何運行?
命令行
我們可以直接在命令行下面運行單元測試
?
?
6、thinkphp是否安裝單元測試的依據是什么?
tests文件夾
看tp的根目錄下是否有tests文件夾
?
7、thinkphp單元測試手冊?
在開發手冊的評論下找到的
快速入門 · thinkphp單元測試手冊|thinkphp 單元測試|thinkphp 測試 · 看云
https://www.kancloud.cn/code7/tpunit/220874
?
?
二、PHPUnit簡介及使用
一、PHPUnit是什么?
1、它是一款輕量級的PHP測試框架,地址:http://www.phpunit.cn
2、手冊:http://www.phpunit.cn/manual/5.7/zh_cn/installation.html
二、為什么要用PHPUnit?
1、可以通過命令操控測試腳本
2、可以測試性能
3、可以測試代碼覆蓋率
4、可以自動化的更新測試用例的參數數據
5、各種格式的日志
三、PHPUnit使用規則
1、?一般被測試類的后面加上”Test”,比如要測試的類為Array,則測試用例的命名為ArrayTest。
2、測試類ArrayTest繼承于PHPUnit_Framework_TestCase
3、測試方法必須為public權限,都是test開頭,或者你也可以選擇給其加注釋@test來表明該函數為測試函數
4、通過斷言方法來對實際值和預期值進行斷言,斷言方法可以參照手冊: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 13ok 1 - ArrayTest::testArrayIsEmpty ok 2 - ArrayTest::testarrayHasKey 1..2 |
四、PHPUnit測試代碼覆蓋率
可以參考:http://www.phpunit.cn/manual/current/zh_cn/code-coverage-analysis.html
可以通過配置phpunit.xml設置需要測試的代碼路徑或文件
例如:phpunit.xml的配置(放在項目根目錄)
1、通過生成html頁面查看代碼覆蓋率
通過執行命令:phpunit --coverage-html ./coverage ./src/test
命令解釋:
- --coverage-html:生成覆蓋率結果的html
- coverage:html生成目錄,可以重新定義
- ./src/test:測試用例目錄(也可以是單個測試用例文件)
覆蓋率結果:
可以看到目錄里每個文件的覆蓋率:
還可以清晰的看到每一個文件代碼覆蓋率:
2、通過生成的text文件查看代碼覆蓋率
通過執行命令:phpunit?--coverage-text ./src/test > test.log
命令解釋:
- --coverage-html:生成覆蓋率結果的text
- ./src/test:測試用例目錄(也可以是單個測試用例文件)
- > test.log:存放覆蓋率結果的文件(文件名稱自己定義)
覆蓋率結果:
可以清晰的看到總覆蓋率和每個文件的覆蓋率。
覆蓋率計算問題:
1、類:只有類中所有代碼都執行了,覆蓋率才為100%;
2、方法:類中的方法每一行都執行了,覆蓋率才算100%。例如:類中有5個方法,有兩個方法每一行執行了,覆蓋率為:40%;
3、行:每一行代碼都執行了就是100%;
?
參考:PHPUnit簡介及使用 - 浮.塵 - 博客園
https://www.cnblogs.com/kccdzz/p/6763735.html
?
?
三、第一次用 PHPUnit 寫測試就上手
一、什么是測試?測試的重要性?
開發者在撰寫程式的時候,程式不大可能會沒有問題,所以通常就需要驗證程式的執行是不是符合預期。測試程式能用來驗證程式程式的運作是不是正常的,并發現程式中的錯誤,以增加軟體品質。
下面是一個活動報名的系統:
這一個活動報名系統主要提供使用者報名活動,在報名活動內還有一些子功能,像是「限制活動報名人數」,如果是這一個子功能,該如何測試呢?
直覺想到可能就需要有 20 個以上的使用者,然后讓這個些使用者分別來報名活動,如果沒超過限制的人數,使用者就能繼續報名,反之,超過了限制人數的話,使用者就無法繼續報名了。說到這里,會覺得這是什么測試!
先分析一下,照上面的方法進行測試會有什么問題:
1.測試案例一多,會花太多時間
這時候,如果再增加報名截止日期的測試,這樣又需要再對報名功能測試一次。
2.改了程式碼之后,需要再做一次測試
日后維護時,會需要再次修改程式碼,但是,改了程式碼之后,該如何驗證修改后的程式運作上是沒問題的?所以,可能又要再次從頭做一次測試。
3.與其他程式混在一起測試
要執行報名功能的程式碼,要透過 view 的程式去呼叫。但是,這樣做測試的時候,如果測試失敗,就必須花時間去找出是報名的程式出問題,還是 view 程式。
那該如何解決這些問題呢?針對開發者來說,需要一個可以自動化、重復的、獨立的測試。
二、單元測試
單元測試是分別對程式的單元,例如:函式 (function)、方法 (method),進行測試,測試時會判斷單元的執行結果是不是有符合預期。
從上圖可以看到,撰寫了Event 類別提供了兩個方法,reserve()、unreserve(),也就是目標程式。
接著透過 EventTest 的兩個測試案例,testReserve() 與 testUnreserve() 分別來對 Event 類別中的兩個類別方法執行測試,測試的結果會在測試案例中驗證,如果驗證通過,表示測試就成功了!
單元測試能協助開發者什么?
1.確保單元的執行結果
這一點蠻覺得就可以了解到,單元測試能協助驗證目標程式的執行結果。
2.盡早發現程式中的錯誤
因為單元測試是在開發的時候就進行的,所以能發現程式中存在的問題。
沒使用單元測試的時候,寫好了一份程式,但是,這份程式碼需要與其他程式碼整合才有辦法運作。所以就需要等整個程式開發的差不多的時候,才能對程式進行測試,在測試出現問題的時候,會花許多時間來厘清是那一份程式導致的問題。
如果使用單元測試,就能在寫好了一份程式之后進行單元測試,而不用等到之后才對程式測試。
3.修改程式,更加有信心
程式寫好了,需要維護、修 bug,如果修改了程式碼后,能確定修改后的程式與之前的正常運作是一樣的嗎?單元測試能協助修改程式后,對程式執行測試,如果測試過了,表示程式的運作是正常的,測試失敗的話,可能需要再回頭修改程式。
4.測試即文件
在撰寫測試的時候,會對單元所提供的功能進行驗證,所以,除了能透過程式來了解單元的運作外,也能用所撰寫的單元測試來知道,被測試的單元有哪些運作及功能。
在開發的時候,會撰寫一些文件來作為軟體的文件,在實際上,有時候那些文件并不一定會隨著程式變更而修改,到后來會變成之前所做的文件跟程式是不同步的。
因為,單元測試的程式會對目標程式進行驗證,所以,測試能避免掉傳統文件所造成的程式與文件不同步的問題。
三、簡介 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
?
?
?
四、Tp5 單元測試
先安裝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
?
五、thinkphp5單元測試安裝及使用
1、安裝:命令行根目錄下運行安裝代碼
這后面或許不應該加 v1.0
?
擴展里面的phpunit
?
安裝前后擴展目錄vendor對比:
?
快速入門 · thinkphp單元測試手冊|thinkphp 單元測試|thinkphp 測試 · 看云
https://www.kancloud.cn/code7/tpunit/220874
?
?
?
?
?
總結
以上是生活随笔為你收集整理的PHPUnit简介及使用(thinkphp5的单元测试安装及使用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快递鸟电子面单打印功能基于java
- 下一篇: 非常便捷的本地Mock