Php Yii模块的单元测试
我希望分别对Yii模块进行单元测试。我已经成功地配置了它。但是,当我为我的模块控制器(LeadController)运行测试类时,出现以下错误Php Yii模块的单元测试,php,unit-testing,yii,Php,Unit Testing,Yii,我希望分别对Yii模块进行单元测试。我已经成功地配置了它。但是,当我为我的模块控制器(LeadController)运行测试类时,出现以下错误 PHPUnit 3.7.31 by Sebastian Bergmann. 从中读取的配置 D:\xampp\htdocs\AdlugeCore\protected\modules\lead\tests\phpunit.xml E 时间:153毫秒,内存:3.00Mb 有1个错误: 1) LeadTest::testActionAdd尝试获取非对象的属
PHPUnit 3.7.31 by Sebastian Bergmann.
从中读取的配置
D:\xampp\htdocs\AdlugeCore\protected\modules\lead\tests\phpunit.xml
E
时间:153毫秒,内存:3.00Mb
有1个错误:
1) LeadTest::testActionAdd尝试获取非对象的属性
D:\xampp\htdocs\AdlugeCore\protected\modules\lead\controllers\LeadController.php
:57
D:\xampp\htdocs\AdlugeCore\protected\modules\lead\tests\unit\LeadTest.php:15
失败!测试:1,断言:0,错误:1
下面是我的测试课:
Yii::import('application.protected.modules.lead.controllers.*');
Yii::import('application.protected.modules.lead.components.*');
class LeadTest extends CTestCase {
public $obj;
public function setUp() {
$this->obj = new LeadController(rand());
$this->obj->init();
}
public function testActionAdd() {
$this->obj->actionAdd();
$this->assertTrue(TRUE);
}
public function tearDown() {
unset($this->obj);
}
}
在LeadController.php中
class LeadController extends Controller {
public $lead;
public function init() {
$this->lead = new LeadManager();
}
public function actionAdd($param = array()) {
$result = $this->lead->AddProcess($param);
return $result;
}
}
请帮助我解决这个问题…是的,问题是在进行单元测试时从未调用init()方法。
如果你把你的代码放在_construct()方法中,你就没事了。错误在
D:\xampp\htdocs\AdlugeCore\protected\modules\lead\controllers\LeadController.php的第57行,那么你能添加它吗?$result=$this->lead->AddProcess($param);上面已经给出了…你能在$result=$this->lead->AddProcess($param)之前var\u dump($this->lead)
吗代码>?最好为LeadManager
和LeadController
创建单独的测试。在LeadController
中,在正常情况下,框架会触发CController::run($actionID)
方法,因此如果您想测试真正的路由,这就是方法,而不是直接调用actionAdd
方法。我从这里得到了答案