1. 程式人生 > 程式設計 >ThinkPHP5與單元測試PHPUnit使用詳解

ThinkPHP5與單元測試PHPUnit使用詳解

thinkphp5.0 是 tp 發展路線第一個支援 composer 的。tp 有自己的載入機制,composer 也有自己的載入機制。

官方提供了 think-testing 元件可以通過 composer require topthink/think-testing 1.* 安裝,但我對這個測試元件不是很滿意,原因是它每個測試都是模擬成 http 請求。這也就意味著對於一些特定函式,還得封裝到控制器中或者路由,該控制器還得控制它生產環境不能對外開放。thinkphp5.0 是 tp 發展路線第一個支援 composer 的。tp 有自己的載入機制,composer 也有自己的載入機制。

PHPUnit是一個用PHP程式語言開發的開源軟體,是一個單元測試框架。PHPUnit由Sebastian Bergmann建立,源於Kent Beck的SUnit,是xUnit家族的框架之一。

單元測試是對單獨的程式碼物件進行測試的過程,比如對函式、類、方法進行測試。單元測試可以使用任意一段已經寫好的測試程式碼,也可以使用一些已經存在的測試框架,比如JUnit、PHPUnit或者Cantata++,單元測試框架提供了一系列共同、有用的功能來幫助人們編寫自動化的檢測單元,例如檢查一個實際的值是否符合我們期望的值的斷言。單元測試框架經常會包含每個測試的報告,以及給出你已經覆蓋到的程式碼覆蓋率。

總之一句話,使用phpunit進行自動測試,會使你的程式碼更健壯,減少後期維護的成本,也是一種比較標準的規範,現如今流行的PHP框架都帶了單元測試,如Laraval,Symfony,Yii2等,單元測試已經成了標配。

另外,單元測試用例是通過命令操控測試指令碼的,而不是通過瀏覽器訪問URL的。

專案內安裝PHPUnit

使用composer方式安裝 PHPUnit 專案根目錄下執行下面這段程式碼

composer require phpunit/phpunit 

自動下載適配版本 我下載的時4.8.36

ThinkPHP5與單元測試PHPUnit使用詳解

ThinkPHP5與單元測試PHPUnit使用詳解

將 F:\wamp\wamp\www\tp5\vendor\bin新增加到 PATH 環境變數中(這樣PHPunit全域性生效)

ThinkPHP5與單元測試PHPUnit使用詳解

PHPUnit簡單用法

1、單個檔案測試

根目錄下建立目錄tests

ThinkPHP5與單元測試PHPUnit使用詳解

新建檔案FirstTest.php,編輯如下:

<?php
/**
 * 1、引入autoload.php檔案
 * 2、測試案例
 *
 *
 */
namespace App\tests;
require_once __DIR__ . '/../vendor/autoload.php';
 
 
use PHPUnit\Framework\TestCase;
 
 
class FirstTest extends TestCase
{
  public function testTure()
  {
    $stack = [];
    $this->assertEquals(0,count($stack));
  }
}

程式碼解釋:

FirstTest為測試類FirstTest繼承於PHPUnit\Framework\TestCase測試方法testTure(),測試方法必須為public許可權,一般以test開頭,或者你也可以選擇給其加註釋@test來表在測試方法內,類似於assertEquals()這樣的斷言方法用來對實際值與預期值的匹配做出來以此判斷方法是否正確

命令列執行:
tests目錄下 執行>phpunit FirstTest 命令 測試檔案命名

ThinkPHP5與單元測試PHPUnit使用詳解

測試專案內方法

tp5專案下的控制器在 F:\wamp\wamp\www\tp5\application\index\controller 資料夾下 寫一個簡單的方法

ThinkPHP5與單元測試PHPUnit使用詳解

在tests內寫一個IndexTest.php

<?php
 
namespace App\tests;
require_once __DIR__ . '/../vendor/autoload.php';
 
use PHPUnit\Framework\TestCase;
use app\index\controller\Index;
 
 
class IndexTest extends TestCase
{
  public function testSum()
  {
    $obj = new Index;
    $this->assertEquals(6,$obj->index(2,3));
 
  }
 
}

執行後的結果 成功!

ThinkPHP5與單元測試PHPUnit使用詳解

如果我在index.php,和IndexTest.php都故意寫錯

ThinkPHP5與單元測試PHPUnit使用詳解

ThinkPHP5與單元測試PHPUnit使用詳解

返回結果 會有錯誤位置

ThinkPHP5與單元測試PHPUnit使用詳解

其他用法

其他用法請參考官網:PHPUnit中國官網