<?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']); }}
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答