Phpunit 测试ThinkPHP (原创)

使用phpunit 工具测试框架程序,最重要的是要在测试环境中模拟框架环境

比如 配置文件,加载模块,session,cookie 等等,如果没有特别需求,尽量用thinkphp 系统加载所有环境,

 

1、测试工具包

  一个专门测试thinkphp 的封装工具,在编写测试代码时把工具包加载到测试文件中

工具包:有两部分组成:核心包Library,项目包:Thinkphp项目名称。

 

核心包Library 主要由以下文件组成

#测试控制器Action 的基类,所有测试action 的case 都必须继承此类

BaseActionTest.php

#测试页面(Html)的基类,所有测试Html的case 都必须继承此类

BaseHtmlTest.php

#测试业务(Service)的基类,所有测试Service的case 都必须继承此类

BaseModelTest.php

# 测试控制器工具类

Controller.php

HttpWebRequest2.php

HttpWebRequest.php

IHttpWebRequest.php

#测试控制器时设置session 文件

Setsession.php

# Thinkphp 项目入口文件

TPConfig.php

 

项目包 主要由以下文件组成

#测试控制器文件目录

Action

#测试页面文件目录

Html

#测试业务文件目录

Service

#测试控制器文件时必须加载的初始化文件

ActionInit.php

#测试页面文件时必须加载的初始化文件

HtmlInit.php

#测试业务文件时必须加载的初始化文件

ServiceInit.php

#测试项目的配置文件

Config.php

 

2、修改Thinkphp代码

1、打开ThinkPHP/Lib/Core/App.class.php 文件,此处修改,主要是为了测试model 类

,找到App::exec()。

修改为:

if(!defined('APP_PHPUNIT_MOLDE') || !APP_PHPUNIT_MOLDE){

    App::exec();

}

 

 

2、修改项目配置文件,以便加载测试数据库

打开{项目名称}/Config/config.php 文件。

文件头部写入:

if(defined('APP_PHPUNIT') || APP_PHPUNIT == true) {

    $_systemConfig = require APP_ROOT_PATH.'testsystemconfig.php';

} else  {

    $_systemConfig = require APP_ROOT_PATH.'systemconfig.php';

}

3、Thinkphp 测试用例

在测试项目目录Service目录下创建文件UserServiceTest.php,内容如下

require_once'PHPUnit/Autoload.php';

require_once'../ServiceInit.php';

/**

 * 会员业务测试类

 *

 */

class UserServiceTest extends BaseModelTest

{

   

    /**

     * 测试管理员登录

     */

    public function testLogin()

    {

        //echo THINK_PATH;

        $s_user = Ap::GetService('User');

       

        $_rtn =$s_user->Login('admin','admin');

        $this->assertEquals(true,$_rtn);

    }

   

    /**

     * 验证用户名是否唯一检查

     */

    public function testCheck()

    {

        //echo THINK_PATH;

        $s_user = Ap::GetService('User');

        $_rtn =$s_user->Login('admin','admin');

        $this->assertEquals(true,$_rtn);

    }

   

}

 

?>

 

切换到Service目录下,命令行输入:phpunit  UserServiceTest.php

 

特别说明:在正式使用时,一般都不用在代码中直接加载

require_once'PHPUnit/Autoload.php';

require_once'../ServiceInit.php';

正式使用时,都会有工具自动加载,或phpunit.xml 已经配置好加载文件

er New�8mo�o@ot-family:"Times New Roman";color:#3F5FBF'>     

     -->

     

     <whitelist addUncoveredFilesFromWhitelist="true">

      <directory suffix="Service.class.php">src/Servicedirectory>

      

    whitelist>

   

    filter>

  

  

   <logging>

       

        <log type="coverage-html"target="test/Log/html"charset="UTF-8"yui="true"highlight="false"lowUpperBound="35"highLowerBound="70"/>

       

        <log type="coverage-clover"target="test/Log/coverage/coverage.xml"/>

    logging>

phpunit>

你可能感兴趣的:(php)