Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii模块的单元测试_Php_Unit Testing_Yii - Fatal编程技术网

Php Yii模块的单元测试

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尝试获取非对象的属

我希望分别对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尝试获取非对象的属性

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
方法。我从这里得到了答案