国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHPUnit單元測試YAF控制層

2020-03-22 20:09:46
字體:
來源:轉載
供稿:網友
  • 在Yaf應用中,創建一個控制層UserController:

    <?phpClass UserController extends Yaf_Controller_Abstract {    // init方法相當于控制器的初始化函數,取消自動渲染視圖    html' target='_blank'>public function init() {        Yaf_dispatcher::getInstance()->disableView();    }    // 輸出需要的JSON信息    private function __responseJson($code=0, $data=FALSE) {        $response = json_encode(array('code'=>$code, 'data'=>$data));        $this->getResponse()->setBody($response);    }    // JSON Action    public function jsonAction($uid=0) {        if ( $uid < 1 ) return $this->__responseJson(-1);         $user_model = new UserModel();        $row = $user_model->fetchRowById($uid);        return $this->__responseJson(0, $row);    }}
    測試控制器是一個相對比較不容易理解的過程,由于控制器本身可能存在輸出一段JSON后Exit的過程,會導致Response出來的數據無法別測試用例獲取。這里就需要YAF兩個特殊的方式來操作:1. 輸出的時候需要用到Yaf_Response_Abstract的方法。該方法同時可以在Yaf_Dispatchar調度器中通過設置returnResponse控制是否輸出數據,因此我們之前在User控制器中使用:$this->getResponse()->setBody($response);2. YAF本身允許在CLI模式執行,我們可以通過YAF_Request_Sample創建一個簡單請求,創建request.php<?php$request = new Yaf_Request_Simple();print_r($request);如我們在命令行下執行request.php,可以看到如下結果:

    基于以上兩點,為此我們來創建一個測試用例:UserControllerTest.php 該文件僅用于測試UserController的業務。


    <?phpdefine('APP_PATH', dirname(__FILE__) . '/../../');define('APP_ENV', 'loc');error_reporting(E_ERROR | E_PARSE); Class UserControllerTest extends PHPUnit_Framework_TestCase {     private $__application = NULL;        // 初始化實例化YAF應用,YAF application只能實例化一次    public function __construct() {        if ( ! $this->__application = Yaf_Registry::get('Application') ) {            $this->__application = new Yaf_Application(APP_PATH."/config/application.ini", APP_ENV);            Yaf_Registry::set('Application', $this->__application);        }    }     // 創建一個簡單請求,并利用調度器接受Repsonse信息,指定分發請求。    private function __requestActionAndParseBody($action, $params=array()) {        $request = new Yaf_Request_Simple("CLI", "Index", "User", $action, $params);        $response = $this->__application->getDispatcher()            ->returnResponse(TRUE)            ->dispatch($request);        return $response->getBody();    }     // 測試 JsonAction UID存在    public function testJsonUid1Action() {        $response = $this->__requestActionAndParseBody('Json', array('uid'=>1));        $data     = json_decode($response, TRUE);        $this->assertInternalType('array', $data);        $this->assertEquals('0', $data['code']);        $this->assertInternalType('string', $data['data']['username']);        $this->assertRegExp('/^/d+$/', $data['data']['groupid']);        $this->assertRegExp('/^/d+$/', $data['data']['adminid']);        $this->assertRegExp('/^/d+$/', $data['data']['regdate']);    }     // 測試 JsonAction UID不存在,UID不存在返回的code應該是-1    public function testJsonUidNotFoundAction() {        $response = $this->__requestActionAndParseBody('Json');        $data     = json_decode($response, TRUE);        $this->assertInternalType('array', $data);        $this->assertEquals('0', $data['code']);    }}



    注意我們創建請求的過程 (__requestActionAndParseBody):1.設置CLI請求的Request對象信息;2.通過Application獲取調度器Dispatcher;3.設置返回接收Response的對象,不自動輸出;4.通過Dispatcher自動分發指定的Request對象;5.獲取返回的Response主體信息6.進行驗證測試結果:第二個Function由于非法請求返回參數code:-1測試失敗。
    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 望奎县| 乐亭县| 博爱县| 太谷县| 瑞安市| 和林格尔县| 玉龙| 潜山县| 延吉市| 灵武市| 彰武县| 通城县| 九龙县| 台江县| 怀集县| 会同县| 西平县| 苍山县| 兴隆县| 东丰县| 青阳县| 瑞丽市| 托克托县| 昂仁县| 无锡市| 江安县| 砀山县| 涟源市| 兴安县| 罗甸县| 纳雍县| 融水| 北辰区| 蒲城县| 黑水县| 东光县| 郎溪县| 郎溪县| 万年县| 滕州市| 和林格尔县|