-
1 # 劇場蹦野迪
-
2 # 旅行貓Code
何為單元測試:
指對軟體中的基本單元進行測試,如函式、方法等,以檢查其返回值或行為是否符合預期;實際中軟體是很複雜的,由許多元件構成,執行流程連貫在一起,要進行單元片段的測試,就需要為其提供執行上下文(或者說引數)和環境(比如打樁模擬一些物件)來執行,並監控其行為和返回值,為此我們就需要寫出做這件事情的程式程式碼,這樣的程式碼叫做測試用例,許多測試用例有機結合在一起形成一個整體的測試,又叫做測試套件,被測試的程式程式碼叫做生產程式碼。phpunit這個軟體就是用來幫助我們寫測試用例並進行測試的。
php的單元測試:phpunit在其官網有詳細教程,這裡介紹一些補充內容。首先要明白phpunit軟體本身就是由php語言實現,其使用是透過命令列進行的,並不是透過瀏覽器訪問明白這一點很重要,許多新人被卡在這裡。很基礎也很簡單,但似乎沒怎麼被提及
想試一下單元測試很久了,但是一直沒有合適的專案,而且中文網路上的PHPUnit教程要麼太舊,要麼太亂,所以總也沒學會。最近準備把手頭的專案重構一下,決定開始使用PHPUnit做單元測試,先照著PHPUnit的官網做了一下Tutorial,雖然已經很簡單了,仍然被卡住幾次,所以寫篇文章記錄一下。因為對PHP的包管理系統不熟悉,這篇文章會從安裝開始。
1.安裝PHPUnit如果使用PHAR安裝的話很簡單。Phar歸檔就像Java的Jar,可以直接被PHP直譯器執行。在*nix系統下,可以執行下面三條命令:
➜ wget ➜ chmod +x phpunit.phar ➜ sudo mv phpunit.phar /usr/local/bin/phpunit
考慮到這次的重構會引入比較多類庫,我選擇了Composer做依賴管理。我在Windows上試過PhpStorm裡的Composer,總是失敗,感覺是網路不好的原因。這次在Ubuntu下安裝很順利,全域性安裝Composer之後,在命令列執行
composer global require phpunit/phpunit
全域性安裝PHPUnit。然後在 檔案末尾加一行 (注意替換使用者名稱),來將Composer的global bin目錄加入PATH。
安裝過後執行 看到版本資訊則說明安裝成功。
另外,裝完以後我發現Ubuntu系統可以使用 來安裝,但我沒有試過。
在Windows下我用的是XAMPP環境,其中已經內建PHPUnit了。如果要在命令提示符下使用的話,可以修改環境變數中的PATH,在裡面加上 (或者你修改後的路徑)。再開啟命令提示符,執行看一下。
2.第一個測試第一個Tutorial我使用的是PHPUnit官網上的Getting Started,這裡寫的比它還要簡單一點。
專案的目錄結構如下:
├── phpunit.xml ├── src │ ├── autoload.php │ └── Money.php └── tests └── MoneyTest.php
第一個檔案是專案程式碼,內容如下:
與之對應的單元測試是目錄下的,注意單元測試檔名最好是,這樣以後指定目錄便可以執行目錄下的所有測試。
程式碼很簡單,即斷言後一個引數的執行結果與前一個引數相等,其他不解釋了。
現在,如果在里加一行。然後在專案根目錄下執行,就可以看到執行結果了。
3.自動載入但是,逐個新增include的方式太不方便,最好是能自動include所需的檔案,PHPUnit提供了一個引數,可以使用專案的autoload檔案。這裡我自己寫了一個最簡單的,只要4行。這個檔案並不是PHPUnit專用的,應該放在src目錄下。
當需要類時,就去。寫完函式之後要用註冊上。
現在就可以去掉中的語句,使用來執行測試了。
雖然可以自動載入,但是要執行的命令更長了。我們還可以寫一個配置檔案來為專案指定bootstrap,這樣就不用每次都寫在命令裡了。
配置檔案放在專案根目錄下。
如果要執行MoneyTest,在專案根目錄下執行:如果要執行tests目錄下的所有測試,在專案根目錄下執行:
Reference:
Getting Started with PHPUnit – The PHP Testing Framework
PHP: spl_autoload_register - Manual
PHPUnit Bootstrap and Autoloading classes - Jess Telford
Composer
標籤: none
你可能會疑惑,上面的php程式碼是怎麼回事呢?那就是一個測試用例,簡單的測試了一個數組操作,進行單元測試一般透過以下四步:1. 針對生產程式碼類 Class 的測試寫在類 ClassTest中。2. ClassTest(通常)繼承自 PHPUnit\Framework\TestCase。3. 測試都是命名為 test* 的公用方法。也可以在方法的文件註釋塊(docblock)中使用 @test 標註將其標記為測試方法。4. 在測試方法內,類似於 assertEquals()這樣的斷言方法用來對實際值與預期值的匹配做出斷言判斷。這裡你可能會有幾個地方迷惑:1、在註釋塊中使用的標註,php可以透過反射得到,程式可以利用得到的資訊進行配置2、上列中測試用例程式碼裡面的TestCase類來自哪裡?並沒有被載入啊?上文提到phpunit本身是用php語言寫成的,打包成了phar供使用,phar是可執行的,執行時首先執行包裡面的存根檔案stub你可以按照上文雲客的另外一篇phar帖子介紹的方法提取還原phpunit.phar包,或者使用phpstorm這樣的ide直接開啟在.phar/stub.php裡你將看到存根程式碼,TestCase類就是在存根程式碼裡面require的“phpunit yunke”這條命令列程式碼將首先執行phpunit指令碼,從存根檔案開始執行,然後由phpunit載入測試用例程式碼可以看出程式並不是從測試用例指令碼開始執行的,現在明白TestCase類哪裡來的了吧透過以上內容再配合官網文件,新手應該可以順利入門了 -
3 # 邊緣人
1.安裝
PHPUnit如果使用PHAR安裝的話很簡單。Phar歸檔就像Java的Jar,可以直接被PHP直譯器執行。在*nix系統下,可以執行下面三條命令:
➜ wget ➜ chmod +x phpunit.phar ➜ sudo mv phpunit.phar /usr/local/bin/phpunit
考慮到這次的重構會引入比較多類庫,我選擇了Composer做依賴管理。我在Windows上試過PhpStorm裡的Composer,總是失敗,感覺是網路不好的原因。這次在Ubuntu下安裝很順利,全域性安裝Composer之後,在命令列執行
composer global require phpunit/phpunit
全域性安裝PHPUnit。然後在 檔案末尾加一行 (注意替換使用者名稱),來將Composer的global bin目錄加入PATH。
安裝過後執行 看到版本資訊則說明安裝成功。
另外,裝完以後我發現Ubuntu系統可以使用 來安裝,但我沒有試過。
在Windows下我用的是XAMPP環境,其中已經內建PHPUnit了。如果要在命令提示符下使用的話,可以修改環境變數中的PATH,在裡面加上 (或者你修改後的路徑)。再開啟命令提示符,執行看一下。
2.第一個測試
第一個Tutorial我使用的是PHPUnit官網上的Getting Started,這裡寫的比它還要簡單一點。
專案的目錄結構如下:
├── phpunit.xml ├── src │ ├── autoload.php │ └── Money.php └── tests └── MoneyTest.php
第一個檔案是專案程式碼,內容如下:
與之對應的單元測試是目錄下的,注意單元測試檔名最好是,這樣以後指定目錄便可以執行目錄下的所有測試。
程式碼很簡單,即斷言後一個引數的執行結果與前一個引數相等,其他不解釋了。
現在,如果在里加一行。然後在專案根目錄下執行,就可以看到執行結果了。
3.自動載入
但是,逐個新增include的方式太不方便,最好是能自動include所需的檔案,PHPUnit提供了一個引數,可以使用專案的autoload檔案。這裡我自己寫了一個最簡單的,只要4行。這個檔案並不是PHPUnit專用的,應該放在src目錄下。
當需要類時,就去。寫完函式之後要用註冊上。
現在就可以去掉中的語句,使用來執行測試了。
雖然可以自動載入,但是要執行的命令更長了。我們還可以寫一個配置檔案來為專案指定bootstrap,這樣就不用每次都寫在命令裡了。
配置檔案放在專案根目錄下。
如果要執行MoneyTest,在專案根目錄下執行:如果要執行tests目錄下的所有測試,在專案根目錄下執行:
回覆列表
一、下載 PHPUnit
1
3
wget https://phar.phpunit.de/phpunit.phar
php phpunit.phar --version
二、建立 MyTest.php檔案
1
3
4
5
6
7
8
9
10
11
<?php
class MyTest
{
public function add($a, $b)
{
return $a + $b;
}
}
三、建立 MyTestTests.php 檔案
1
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
use PHPUnit\Framework\TestCase;
class MyTestTests extends TestCase
{
private $mytest;
protected function setUp()
{
$this->mytest = new MyTest();
}
protected function tearDown()
{
$this->mytest = NULL;
}
public function testAdd()
{
$result = $this->mytest->add(1, 3);
$this->assertEquals(4, $result);
}
}
現在我們準備執行下面的簡單例子:
1
php phpunit.phar MyTestTests.php
你會發現這樣的結果:
847e0a8a0309751794d4c168d1bfbbf.png