使用lumen編寫單元測試
1. 控制器
我們先寫了一個簡單的app控制器CalcController.php
<?php
namespace App\Http\Controllers;
class CalcController extends Controller
{
/**
* @todo: 簡單計算
* @author: friker
* @date: 2019/3/15
* @param int $a
* @param int $b
* @param string $oper
* @return float|int
* @throws
*/
public function oper($a = 0 , $b = 0 , $oper = '+'){
if($a ==0 && $b == 0 && $oper == '+'){
throw new \ArgumentCountError("function params error");
}
$res = 0 ;
switch ($oper) {
case '+' :
$res = $a + $b;
break;
case '-' :
$res = $a - $b;
break;
case '*' :
$res = $a * $b;
break;
case '/' :
$res = $a / $b;
break;
}
return $res;
}
}
2. 編寫測試用例
在文件夾/lumen/tests 中添加 CalcControllerTest.php
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2019/3/15
* Time: 10:00
*/
class CalcControllerTest extends TestCase
{
private $calc;
public function setUp()
{
parent::setUp(); // TODO: Change the autogenerated stub
$this->calc = new \App\Http\Controllers\CalcController();
}
public function test_oper(){
$a= 8;
$b = 4;
$fact = $a / $b;
$test = $this->calc->oper($a,$b,'/');
$this->assertTrue(is_int($test));
$this->assertEquals($fact,$test);
}
public function test_operException(){
$this->expectException("ArgumentCountError");
$this->expectExceptionMessage("function params error");
$this->calc->oper();
}
}
setUp
是測試用例開始前會自動自行的部分
我們在這裏引入我們的控制器類,並實例化
- 我們編寫了兩個測試函數
test_oper
: assertTrue
斷言參數是否爲true
assertEquals
斷言兩個參數是否相等
test_operException
: expectException
設置期待的報錯類型
expectExceptionMessage
: 設置期待的報錯信息
第二個測試函數調用時,執行順序必須先設置expect然後執行函數
3. 執行
我們啓用ConEmu
當然,你也可以直接使用黑窗口cmd, 轉到項目根目錄
cd f:\www\lumen\
執行
vendor\bin\phpunit
注意,這裏執行的目錄必須是lumen根目錄這一級,不能轉到 vendor\bin
後直接
執行 phpunit
,否則會報錯。