PHPUnit簡介及使用(thinkphp5的單元測試安裝及使用)

PHPUnit簡介及使用(thinkphp5的單元測試安裝及使用)

1、總結

一句話總結:直接google這個phpunit(how to use phpunit),而後去官網看使用樣例和手冊,那些英文和內容以看懂的,不要有抵觸情緒

官網地址:https://phpunit.de/getting-started-with-phpunit.htmlphp

 

一、爲何要用PHPUnit?

測試性能

一、能夠經過命令操控測試腳本html

二、能夠測試性能java

三、能夠測試代碼覆蓋率thinkphp

四、能夠自動化的更新測試用例的參數數據api

五、各類格式的日誌數組

 

二、官方phpunit使用實例?

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.phpapp

<?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')
        );
    }
}

 

 

三、單元測試的特色(好比phpunit,java的junit)?

文件夾
test
測試函數

a、測試的代碼是在test文件夾下的,和源碼不是在同一個文件夾下

b、測試的類或者方法都加有test字樣

c、有一些經常使用的測試函數,好比:

assertTrue 爲判斷是否真
assertFalse 爲判斷是否假
assertGreaterThan爲判斷是否大於
assertLessThanOrEqual判斷是否小於或等於
assertEquals爲判斷是否相等

 

 

四、thinkphp如何添加單元測試?

手冊 雜項

thinkphp的開發手冊的雜項裏面有教怎麼使用單元測試,

thinkphp5的單元測試也是用的phpunit,這張圖能夠說明

因此關於單元測試的具體方法能夠去phpunit官方文檔裏面看

 

五、thinkphp的單元測試如何運行?

命令行

咱們能夠直接在命令行下面運行單元測試

 

 

六、thinkphp是否安裝單元測試的依據是什麼?

tests文件夾

看tp的根目錄下是否有tests文件夾

 

七、thinkphp單元測試手冊?

在開發手冊的評論下找到的

快速入門 · thinkphp單元測試手冊|thinkphp 單元測試|thinkphp 測試 · 看雲
https://www.kancloud.cn/code7/tpunit/220874

 

 

2、PHPUnit簡介及使用

1、PHPUnit是什麼?

一、它是一款輕量級的PHP測試框架,地址:http://www.phpunit.cn

二、手冊:http://www.phpunit.cn/manual/5.7/zh_cn/installation.html

2、爲何要用PHPUnit?

一、能夠經過命令操控測試腳本

二、能夠測試性能

三、能夠測試代碼覆蓋率

四、能夠自動化的更新測試用例的參數數據

五、各類格式的日誌

3、PHPUnit使用規則

一、 通常被測試類的後面加上」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 
{
//測試用例運行前初始化
public function setUp(){}

//測試用例運行後執行
public function tearDown(){}
/**
* @test
*/
public function testArrayIsEmpty()
{
$fixture = array();

// 斷言數組$fixture中元素的數目是0。
$this->assertEquals(0, sizeof($fixture));
}
/**
* @test
*/
public function testarrayHasKey()
{
$arr = array(
'id'=>666,
'name'=>'zhangsan',
);
//斷言$arr是一個數組
$this->assertTrue(is_array($arr));
//斷言數組$arr中含有索引id
$this->assertArrayHasKey('id',$arr);
//斷言數組$arr中含有索引name
$this->assertArrayHasKey('name',$arr);
}

}

命令行啓動測試用例:

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
ok 1 - ArrayTest::testArrayIsEmpty
ok 2 - ArrayTest::testarrayHasKey
1..2

4、PHPUnit測試代碼覆蓋率

能夠參考:http://www.phpunit.cn/manual/current/zh_cn/code-coverage-analysis.html

能夠經過配置phpunit.xml設置須要測試的代碼路徑或文件

例如:phpunit.xml的配置(放在項目根目錄)

一、經過生成html頁面查看代碼覆蓋率

經過執行命令:phpunit --coverage-html ./coverage ./src/test

命令解釋:

  • --coverage-html:生成覆蓋率結果的html
  • coverage:html生成目錄,能夠從新定義
  • ./src/test:測試用例目錄(也能夠是單個測試用例文件)

覆蓋率結果:

能夠看到目錄裏每一個文件的覆蓋率:

還能夠清晰的看到每個文件代碼覆蓋率:

二、經過生成的text文件查看代碼覆蓋率

經過執行命令:phpunit --coverage-text ./src/test > test.log

命令解釋:

  • --coverage-html:生成覆蓋率結果的text
  • ./src/test:測試用例目錄(也能夠是單個測試用例文件)
  • > test.log:存放覆蓋率結果的文件(文件名稱本身定義)

覆蓋率結果:

能夠清晰的看到總覆蓋率和每一個文件的覆蓋率。

覆蓋率計算問題:

一、類:只有類中全部代碼都執行了,覆蓋率才爲100%;

二、方法:類中的方法每一行都執行了,覆蓋率纔算100%。例如:類中有5個方法,有兩個方法每一行執行了,覆蓋率爲:40%;

三、行:每一行代碼都執行了就是100%;

 

參考:PHPUnit簡介及使用 - 浮.塵 - 博客園
https://www.cnblogs.com/kccdzz/p/6763735.html

 

 

3、第一次用 PHPUnit 寫測試就上手

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

 

 

 

4、Tp5 單元測試

先安裝composer,如以前電腦環境有安裝composer可跳過12步驟

 

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

 

5、thinkphp5單元測試安裝及使用

一、安裝:命令行根目錄下運行安裝代碼

這後面或許不該該加 v1.0

 

擴展裏面的phpunit

 

安裝先後擴展目錄vendor對比:

 

快速入門 · thinkphp單元測試手冊|thinkphp 單元測試|thinkphp 測試 · 看雲https://www.kancloud.cn/code7/tpunit/220874

相關文章
相關標籤/搜索