PHP單元測試-保障程式碼正確執行的護衛神

大東瓜123發表於2017-06-30

程式碼能否正確執行是應用的關鍵,如何保證程式碼的執行就成為至關重要的事情,“對付坦克的最好工具就是另外一臺坦克”,保證程式碼的正確執行就是使用程式碼來保證,軟體的的需求是變動的,很難保證這一次的改動,會不會將引起上次需求的什麼變化。如果是測試人員發現了可以修改,但是如果部署到線上,引起的問題就會嚴重的。
單元測試就是提供一些條件,這些條件將產生一定的結果,如果結果不符就不能通過測試,不能通過測試產生的原因就是:測試程式碼有問題或者程式程式碼有問題。就需要去檢查具體的原因。
引入單元測試產生的最直接的結果就是程式碼量要比以前多,二測試程式碼的管理問題,三,測試條件的更新問題,但是這些問題在保證程式碼質量面前都顯示不是太重要。
PHP一般情況下用來做伺服器後端資源的操作,比如說資料的讀出與寫入,使用者的註冊與消費都記錄在資料庫中。所以對php業務邏輯的測試就顯的非常重要。
PHP的單元測試工具是PHPUNIT,它屬於XUNIT的類工具,PHPUNIT的部署方法有兩個,一種是通過composer進行安裝,一種是下載phar包進行安裝
單元測試命令是phpunit Test.php,然後根據顯示的資訊進行判斷是否通過測試(在命令列下)。就是這樣簡單

PHPUNIT的安裝方式大體上分為兩種,composer安裝與phar安裝這兩種
composer的安裝方式比較簡單使用方法:  composer require –dev phpunit/phpunit ^6.1

或者使用phar的方式來安裝,也比較簡單,phar相當於一個壓縮包,這個壓縮包是需要依賴php才可以執行的,所以如果機器上有php的話,可以新建一個phpunit.bat檔案,並把這個檔案 的位置加入到路徑中這樣就可以直接的輸入phpunit 命令了,當然也可以不建立這樣的bat檔案,但是每次做除錯的時候,都得帶上php  phpunit.phar  **檔名,

bat檔案內容類似這樣

@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/../phpunit/phpunit/phpunit
php “%BIN_TARGET%” %*
 
 
 或者phpunit.cmd也可以的
 echo @php “%~dp0phpunit.phar” %* > phpunit.cmd
 

在使用phpunit做開的過程中,一定要注意phpunit的版本,因為不同版本的phpunit的測試基類是不一樣的,例如phpunit6.1以上版本

use PHPUnitFrameworkTestCase;
class StackTest extends TestCase
{
	
}

phpunit5的測試基類就是PHPUnit_Framework_TestCase
出現找不到類庫的時候,首先看一下phpunit的基類的版本是否對應,然後再檢查程式碼

對於業務型別的測試來說,業務之間存在著關聯關係,比如說使用者登入之後取得憑據,然後帶著憑據去訪問業務系統,PHPUnit使用
 @depends 標註來表達依賴關係

<?php
use PHPUnitFrameworkTestCase;
class StackTest extends TestCase
{
    public function testEmpty()
    {
        $stack = [];
        $this->assertEmpty($stack);
        return $stack;
    }
    /**
     * @depends testEmpty
     */
    public function testPush(array $stack)
    {
        array_push($stack, `foo`);
        $this->assertEquals(`foo`, $stack[count($stack)-1]);
        $this->assertNotEmpty($stack);
        return $stack;
    }
    /**
     * @depends testPush
     */
    public function testPop(array $stack)
    {
        $this->assertEquals(`foo`, array_pop($stack));
        $this->assertEmpty($stack);
    }
}
?>


相關文章