先了解一下大概狀況吧
這裏利用的thinkphp 內置的test的擴展,對應的phpunit的版本爲phpunit6版本。儘管是舊版本,作一些簡單的測試仍是能夠的php
安裝phpunitthinkphp
➜ 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目錄app
如何進行測試
下面舉一個例子composer
咱們先寫一個簡單的service,而後在test 目錄裏面 寫入框架
如今就完成了一個簡單地測試。測試這個service是否按照咱們的想法進行運算。ide
咱們使用命令行在根目錄下 輸入 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)
以上內容就是最簡單的測試方法。合理利用這些方法。可讓你的程序更加健壯。