thinkphp本身并没有提供相应的单元测试支持,所以本库的目的是将thinkphp中的一些功能集合起来打包成一个库, 使大家可以通过只需导入本库,便可对thinkphp进行单元测试,从而保证软件的质量。 特点是:易用,方便,非入侵式(部分方法除外) 支持版本:ThinkPHP3.2.3
- 定义TP_BASEPATH常量
- 导入base.php库
- 导入欲测试的文件
- 使用phpunit运行单元测试
在Appcation下创建一个新的文件夹test,并新建一个测试类,命名为IndexTest.php。 其代码为:
class IndexTest extends PHPUnit_Framework_TestCase{
//构造函数
function __construct(){
//定义目录路径,最好为绝对路径
define('TP_BASEPATH', 'E:/www/novel/');
//导入base库
include_once 'E:\www\novel\Application\test\base.php';
//导入要测试的控制器
include_once 'E:\www\novel\Application\Home\Controller\IndexController.php';
}
//测试index动作
public function testIndex(){
//新建控制器
$index=new \Home\Controller\IndexController();
//调用控制器的方法
$index->test();
//断言
$this->expectOutputString('123');
}
}
Index控制器为:
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
function test(){
echo 123;
}
}
然后运行phpunit进行单元测试: phpunit E:\www\novel\Application\test\IndexTest.php
由于thinkphp代码中,ajaxReturn是使用exit进行处理的,所以导致了使用ajaxReturn的时候,会造成无法进行单元测试。 所以本库对ajaxReturn进行了一些修改。在使用断言的时候,需要通过事件来相应 比如: try{ //这里写上动作,该动作里面会调用ajaxReturn方法 }catch(AjaxReturnEvent $event){ //这里写上断言,结果为:$event->getMessage() //比如:$this->assertEquals('123',$event->getMessage(),'test'); }