ThinkPHP 利用PHPUnit 進行簡單的測試
阿新 • • 發佈:2019-08-05
先了解一下大概情況吧
這裡利用的thinkphp 內建的test的擴充套件,對應的phpunit的版本為phpunit6版本。儘管是舊版本,做一些簡單的測試還是可以的
安裝phpunit
➜ wget http://phar.phpunit.cn/phpunit.phar ➜ chmod +x phpunit.phar ➜ sudo mv phpunit.phar /usr/local/bin/phpunit ➜ phpunit --version
安裝thinkphp的test擴充套件
composer require topthink/think-testing=2.0.*
安裝完成之後,thinkphp目錄下會多一個test目錄
安裝完成之後,thinkphp目錄下會多一個test目錄
如何進行測試
下面舉一個例子
我們先寫一個簡單的service,然後在test 目錄裡面 寫入
現在就完成了一個簡單地測試。測試這個service是否按照我們的想法進行運算。
我們使用命令列在根目錄下 輸入 php think unit
顯示測試完畢,正常顯示。
斷言函式
斷言函式名(陣列) | 作用 | 斷言函式名(物件) | 作用 | 斷言函式名(類) | 作用 |
assertEquals | 斷言等於 | assertAttributeContains | 斷言屬性包含 | assertClassHasAttribute | 斷言類有某屬性 |
assertNotEquals | 斷言不等於 | assertAttributeContainsOnly | 斷言屬性只包含 | assertClassHasStaticAttribute | 斷言類有某靜態屬性 |
assertArrayHasKey | 斷言有鍵 | assertAttributeEquals | 斷言屬性等於 | assertClassNotHasAttribute | 斷言類沒有某屬性 |
assertArrayNotHasKey | 斷言沒有鍵 | assertAttributeGreaterThan | 斷言屬性大於 | assertClassNotHasStaticAttribute | 斷言類沒有某靜態屬性 |
assertContains | 斷言包含 | assertAttributeGreaterThanOrEqual | 斷言屬性大於等於 | ||
assertNotContains | 斷言不包含 | assertAttributeLessThan | 斷言屬性小於 | ||
assertContainsOnly | 斷言只包含 | assertAttributeLessThanOrEqual | 斷言屬性小於等於 | ||
assertNotContainsOnly | 斷言不只包含 | assertAttributeNotContains | 斷言不包含 | ||
assertAttributeNotContainsOnly | 斷言屬性不只包含 | ||||
assertAttributeNotEquals | 斷言屬性不等於 | ||||
assertAttributeNotSame | 斷言屬性不相同 | ||||
assertAttributeSame | 斷言屬性相同 | ||||
assertSame | 斷言型別和值都相同 | ||||
assertNotSame | 斷言型別或值不相同 | ||||
assertObjectHasAttribute | 斷言物件有某屬性 | ||||
assertObjectNotHasAttribute |
斷言物件沒有某屬性 |
斷言函式名(檔案) | 作用 | 斷言函式名(XML) | 作用 |
assertFileEquals | 斷言檔案內容等於 | assertXmlFileEqualsXmlFile | 斷言XML檔案內容相等 |
assertFileExists | 斷言檔案存在 | assertXmlFileNotEqualsXmlFile | 斷言XML檔案內容不相等 |
assertFileNotEquals | 斷言檔案內容不等於 | assertXmlStringEqualsXmlFile | 斷言XML字串等於XML檔案內容 |
assertFileNotExists | 斷言檔案不存在 | assertXmlStringEqualsXmlString | 斷言XML字串相等 |
assertXmlStringNotEqualsXmlFile | 斷言XML字串不等於XML檔案內容 | ||
assertXmlStringNotEqualsXmlString | 斷言XML字串不相等 |
以上內容的assertEquals是所有斷言函式的一種,具體用法可以自行百度,本文章日後會慢慢補充完畢。
基鏡
目前以上內容已經可以測試每一個service的執行狀況。但是有一部分service 需要有執行的前提條件,我們把建立基礎環境或者依賴製作成可測試的狀態成為基鏡的搭建。
舉個栗子,比如我們在測試新增管理員的時候需要依賴某個資料庫的某個值。那麼我們可以試試以下方法
<?php
namespace tests;
class ExampleTest extends TestCase
{
protected $a;
protected function setUp(): void
{
parent::setUp();
//假設這裡我們從資料庫中查詢出來的a的值為1
$this->a=1;
}
public function testplanService():void
{
$test=new \app\index\service\Test;
//這裡我們可以靈活的使用這個a的值。不需要手動輸入固定的值
$this->assertEquals(2,$test->planService($this->a,1));
}
}
測試資料的移除
我們在測試的時候難免會產生一系列測試資料,我們如何在測試完畢之後刪除這些資料呢,看看以下的例子
<?php
namespace tests;
class ExampleTest extends TestCase
{
protected $a;
protected function setUp(): void
{
parent::setUp();
$this->a=1;
}
public function testplanService():void
{
$test=new \app\index\service\Test;
$this->assertEquals(2,$test->planService($this->a,1));
}
//執行測試完畢之後,測試框架會自動呼叫該類銷燬資料庫的插入資料等等
protected function tearDown(): void
{
$this->assertEquals(1,1);
//銷燬資料操作
}
}
資料供給器
現在假設有如下情況。
插入一個管理員記錄,要求管理員的賬號長度大於6位,小於9位。首字母大寫等等。我們不可能一種情況一個個去測試,對於這種情況,我們可以利用資料供給器來提供批量的資料。
我們新建一個service類
<?php
namespace app\index\service;
class Admin
{
public function add(string $username,string $password):bool
{
if(!preg_match('/^[A_Z]\S{6,8}$/',$username))
{
return false;
}
return true;
}
}
下面我們補上測試程式碼
<?php
namespace tests;
use think\testing\TestCase;
class AddTest extends TestCase
{
protected $add;
protected function setUp(): void
{
$this->add=new \app\index\service\Admin;
}
/**
* @dataProvider addData
* @param string $usernmae
* @param string $password
*/
public function testAdd(string $username,string $password):void
{
$this->assertFalse($this->add->add($username,$password));
}
/**
* 測試情況為true
*
* @return void
*/
public function testAdd_true():void
{
//斷言為true
$this->assertTrue($this->add->add('A123456','1111'));
}
//add 方法資料供給器
public function addData()
{
return [
//資料小於6位
['s123','1111'],
//資料大於9位
['A123456789','1111'],
//首字元小寫
['s1234567','1111']
];
}
}
補上結果
localhost:think yehua$ php think unit
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.
.... 4 / 4 (100%)
Time: 92 ms, Memory: 6.00MB
OK (4 tests, 4 assertions)
以上內容就是最簡單的測試方法。合理利用這些方法。可以讓你的