使用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
,否则会报错。