php – 如何使用CodeIgniter测试控制器?
发布时间:2020-12-13 14:03:18 所属栏目:PHP教程 来源:网络整理
导读:我有一个使用CodeIgniter MVC框架构建的 PHP Web应用程序.我想测试各种控制器类.我正在使用 Toast进行单元测试.我的控制器没有状态,他们处理的一切都被保存到会话中或传递到视图来显示.创建一个模拟会话对象并测试它是否正常工作是否直接(只需创建一个模拟对
我有一个使用CodeIgniter MVC框架构建的
PHP Web应用程序.我想测试各种控制器类.我正在使用
Toast进行单元测试.我的控制器没有状态,他们处理的一切都被保存到会话中或传递到视图来显示.创建一个模拟会话对象并测试它是否正常工作是否直接(只需创建一个模拟对象并使用$controller-> session = $mock注入它).
我不知道的是如何处理意见.在CodeIgniter中,视图被加载为: $this->load->view($view_name,$vars,$return); 由于我不想改变CI代码,我尽管可以创建一个模拟装载程序并替换原来的代码.而这里就是这个问题,我找不到从CI_Loader派生一个新类的方法. 如果我不包括系统/库/ Loader.php文件,CI_Loader类是未定义的,我不能继承它: class Loader_mock extends CI_Loader 如果我包括文件(使用require_once),我得到错误: Cannot redeclare class CI_Loader 看起来CI代码本身不会使用require_once,无论什么原因. 有人在这里有经验的单元测试CodeIgniter动力应用程序? 编辑:我试图在运行时将一个真正的加载器对象注入一个mock类,并使用__call,__set,__get,__isset和__unset重定向所有调用和变量.但是,它似乎不工作(我没有得到任何错误,只是没有输出,即Toast的空白页).以下是代码: class Loader_mock { public $real_loader; public $varijable = array(); public function Loader_mock($real) { $this->real_loader = $real; } public function __call($name,$arguments) { return $this->real_loader->$name($arguments); } public function __set($name,$value) { return $this->real_loader->$name = $value; } public function __isset($name) { return isset($this->real_loader->$name); } public function __unset($name) { unset($this->loader->$name); } public function __get($name) { return $this->real_loader->$name; } public function view($view,$vars = array(),$return = FALSE) { $varijable = $vars; } }
或者,您可以这样做:
$CI =& get_instance(); $CI = load_class('Loader'); class MockLoader extends CI_Loader { function __construct() { parent::__construct(); } } 然后在你的控制器中执行$this-> load = new MockLoader(). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |