Laradebut #8: PHPUnit 新手村
導讀者: Mouson(陳佑竹)
Laradebut #8: PHPUnit 新手村 - HackMD - https://hackmd.io/s/Sk4xL6jAe
GitHub: https://github.com/mouson/laradebut8_phpunit_demo
測試最小單位的邏輯
測試裡面, 不寫邏輯 ex. if else
不依賴外面不可控的環境
測試案例盡可能彼此之間獨立
測試只測一件事
Fast:快速。可以很快看到結果。
Independent:獨立。測試案例之間不互相影響。
Repeatable:可重複。可重複執行而不影響預期結果。
Self-Validating:不需要人工介入驗證。
Timely:及時。程式完成即可立刻驗證。
三A原則
Arrange : 初始化目標物件、相依物件、方法參數、預期結果,或是預期與相依物件的互動方式。
Assume:預期結果、或預期的互動
Act : 呼叫目標物件的方法。
Assert : 驗證是否符合預期。
TDD
紅燈 -> 綠燈 -> 重構
練習
laravel5.3 本身就有含PHPunti
Cli 輸入跑測試指令
cd project ./vendor/bin/phpunit
第一次應該會像這樣
建立練習測試用資料夾與檔案
- 增加autoload聯繫
輸入指令
composer dump-autoload
- 建立測試
<?php
//使用要測試的class
use App\Test\helper;
/**
*簡單字串測試
*/
class ClassName extends TestCase
{
//每次要開始載入
protected function setUp()
{
$this->help = new helper;
}
public function testArrayUntil()
{
/** Arrange 初始化目標物件、相依物件、方法參數、預期結果,或是預期與相依物件的互動方式。*/
$names = ['Taylor', 'Dayle', 'Matthew', 'Shawn', 'Neil'];
/** Assume 預期結果、或預期的互動*/
$expected = ['Taylor', 'Dayle'];
/** Act 呼叫目標物件的方法*/
$result = $this->help->array_until($names, 'Matthew');
/** Assert 驗證是否符合預期*/
$this->assertEquals($expected, $result);
}
}
?>
- 先跑一次測試, 因為還沒實作主程式所以會報錯
- 實作主程式
<?php
namespace App\Test;
use InvalidArgumentException;
class helper
{
public function array_until(array $array, $search)
{
$position = array_search($search, $array);
if ( $position == false ) {
throw new InvalidArgumentException('not find');
}
return array_slice($array, 0, $position);
}
}
?>
- 再跑一次測試 當有符合預期結果, 測試就會通過
非預期結果, ex: 找不到輸入字串jack (行數10)
public function testArrayUntil()
{
/** Arrange 初始化目標物件、相依物件、方法參數、預期結果,或是預期與相依物件的互動方式。*/
$names = ['Taylor', 'Dayle', 'Matthew', 'Shawn', 'Neil'];
/** Assume 預期結果、或預期的互動*/
$expected = ['Taylor', 'Dayle'];
/** Act 呼叫目標物件的方法*/
$result = $this->help->array_until($names, 'jack');//jack 不存在
/** Assert 驗證是否符合預期*/
$this->assertEquals($expected, $result);
}
參閱
如何在Laravel 4.2使用PHPUnit?
http://oomusou.io/laravel/laravel42/laravel-42-phpunit/
Laradebut #8: PHPUnit 新手村
https://hackmd.io/s/Sk4xL6jAe
補一下上新手村所學到的東西, 主要是用直接用PHPUnit實做測試, 還有些實作部分沒記錄上來, 跟Laravel內建的測試使用方式有許些不同, 要再多練習phpunti, 之後研究Laravel到底該怎麼實作。
#講者好厲害
#PHPstorm超屌
#第一次寫測試
#還要多多練習
#重構好厲害
#物件導向的繼承, 多型真好用
#昨日Docker 崩壞, 已救援
留言
張貼留言