我想在zend项目中测试一个模型,
<?php
//require_once('CustomModelBase.php');
class Application_Model_User extends Custom_Model_Base {
protected function __construct() {
parent::__construct();
}
static function create(array $data) {
}
static function load($id) {
}
static function find($name, $order=null, $limit=null, $offset=null) {
);
}
}
在application / model文件夹下的模型,它扩展了一个基类Custom_Model_Base,它与类User位于同一文件夹下。
在我的测试中,我尝试以这种方式创建User的新对象
<?php
class Model_UserTest extends ControllerTestCase
{
protected $user2;
public function setUp() {
parent::setUp();
$this->user2 = new Application_Model_User2();
}
public function testCanDoTest() {
$this->assertTrue(true);
}
}
这是CustomModelBase.php: 抽象类Custom_Model_Base { protected function __construct($ adapter = null){} }
它给了我错误,说“PHP致命错误:Class'Custate_Model_Base'在第4行的\ application \ models \ User.php中找不到”,我在User.php中包含“CustomModelBase.php”,它给了我另一个错误“PHP致命错误:从第13行的D:\ PHP \ apache2 \ htdocs \ ID24_Xiao \ tests \ application \ models \ UserTest.php”中的上下文“Model_User2Test”调用受保护的Application_Model_User :: __ construct()
那我怎么能处理呢?谁能提出一些建议?答案 0 :(得分:2)
如果你使用 5.3.2 或更好,你可以这样做:
public function testCanDoTest() {
// set method "nameOfProctedMethod" to accessible on Class App...
$method = new ReflectionMethod(
'Application_Model_User2', 'nameOfProtectedMethod'
);
$method->setAccessible(true);
$this->assertTrue($method->doSomething());
}
答案 1 :(得分:0)
您不能在课外召集任何受保护的课程成员 将访问修饰符从protected更改为public 或者创建一个静态函数,它将给出该类的实例,例如
static function getInstance(){
return new Model_UserTest();
}
答案 2 :(得分:0)
正如Jeff所说,你可以通过像下面那样公开你的构造函数:
public function __construct() { ...