国产探花免费观看_亚洲丰满少妇自慰呻吟_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編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 星子县| 衡南县| 乐清市| 临朐县| 都江堰市| 江陵县| 江孜县| 乳山市| 顺义区| 汉川市| 朝阳区| 桐庐县| 长顺县| 湟中县| 油尖旺区| 徐汇区| 桐城市| 丰县| 崇仁县| 徐州市| 拉孜县| 睢宁县| 布拖县| 嵊州市| 新营市| 施秉县| 南城县| 仁布县| 花莲县| 锡林浩特市| 绥化市| 那曲县| 永顺县| 分宜县| 横峰县| 肇州县| 贵德县| 七台河市| 金昌市| 新化县| 田东县|