在单元测试中动态设置 Yii 控制器
Set Yii controller dynamically in unit-test
我正在 运行 使用 PHPUnit 进行一些单元测试,并且在这些测试中非常努力地破解我的应用程序(别无他法,旧代码库)。代码库的某些部分使用
Yii::app()->getController()->createUrl(...);
但在这种情况下,没有控制器,所以测试失败。有没有办法在我的测试中动态添加虚拟控制器?像
Yii::app()->setController($dummyController);
或者我是否必须发起某种虚假的路由事件?
您可以简单地使用:
$ctrl = new CController('whatever you need for the id')
并使用它的方法。注意,仅构造方法集 id
。您没有提供太多代码,所以这是一个大概的想法。查看 createUrl()
方法并检查它是否应该工作。
我使用这种技术在控制台环境下呈现页面(并使用它们的内容)。
如果您需要一个控制器进行多次测试,您可以在 setUp
方法中设置一次。
public function setUp()
{
parent::setUp();
Yii::app()->controller = new CController('test');
}
然后您可以在测试中使用它:
Yii::app()->controller->createUrl(...)
我正在 运行 使用 PHPUnit 进行一些单元测试,并且在这些测试中非常努力地破解我的应用程序(别无他法,旧代码库)。代码库的某些部分使用
Yii::app()->getController()->createUrl(...);
但在这种情况下,没有控制器,所以测试失败。有没有办法在我的测试中动态添加虚拟控制器?像
Yii::app()->setController($dummyController);
或者我是否必须发起某种虚假的路由事件?
您可以简单地使用:
$ctrl = new CController('whatever you need for the id')
并使用它的方法。注意,仅构造方法集 id
。您没有提供太多代码,所以这是一个大概的想法。查看 createUrl()
方法并检查它是否应该工作。
我使用这种技术在控制台环境下呈现页面(并使用它们的内容)。
如果您需要一个控制器进行多次测试,您可以在 setUp
方法中设置一次。
public function setUp()
{
parent::setUp();
Yii::app()->controller = new CController('test');
}
然后您可以在测试中使用它:
Yii::app()->controller->createUrl(...)