在单元测试中动态设置Yii控制器

时间:2017-06-14 14:18:55

标签: php unit-testing yii regression-testing yii1.x

我正在使用PHPUnit运行一些单元测试,并且在那些测试中非常难以破解我的应用程序(没有其他方式,旧的代码库)。代码库的某些部分使用

Yii::app()->getController()->createUrl(...);

但在这种情况下,没有控制器,因此测试失败。有没有办法在我的测试中动态添加虚拟控制器?像

这样的东西
Yii::app()->setController($dummyController);

或者我是否必须发起某种假路由事件?

2 个答案:

答案 0 :(得分:2)

您可以简单地使用:

$ctrl = new CController('whatever you need for the id')

并使用其方法。注意,仅构造方法集id。你没有提供太多的代码,所以这是一个大致的想法。查看createUrl()方法,检查它是否可行。

我使用这种技术在控制台环境下渲染页面(并使用它们的内容)。

答案 1 :(得分:0)

如果您需要一个用于多个测试的控制器,您可以在setUp方法中设置一次。

public function setUp()
{
    parent::setUp();
    Yii::app()->controller = new CController('test');
}

然后你可以在测试中使用它:

Yii::app()->controller->createUrl(...)