在不访问数据库服务器(或其他外部资源)的情况下,针对 Yii 模型执行单元测试的首选/正确方法是什么?我发现的所有单元测试文档都建议您必须有一个事件的数据库服务器,但显然这对于单元测试来说并不理想。
关于它的值(value),这是我的 config/test.php 和我的 bootstrap.php:
<?php
return CMap::mergeArray(
require(dirname(__FILE__).'/main.php'),
array(
'components'=>array(
'fixture'=>array(
'class'=>'system.test.CDbFixtureManager',
),
),
)
);
和
<?php
// change the following paths if necessary
$yiit=dirname(__FILE__).'/../../yii-1.1.13.e9e4a0/framework/yiit.php';
$config=dirname(__FILE__).'/../config/test.php';
require_once($yiit);
require_once(dirname(__FILE__).'/WebTestCase.php');
Yii::createWebApplication($config);
当我运行测试时,我得到:
CDbException: CDbConnection.connectionString cannot be empty.
最佳答案
Yii 作者为他们的集成测试取了一个误导性的名字。他们称它们为“单元”。事实上,如果你需要连接到数据库服务器,它就不再是单元测试了。
如果你想单独测试你的 ActiveRecords,首先你应该实现一个假的 CDbConnection,它将映射到一些内存数据集(或基于文件系统的数据集)。 Yii 没有内置这样的东西。
之后,您只需在 bootstrap.php
中执行 CActiveRecord::$db = new FakeDbConnection()
我相信您甚至不必更改现有的完全测试套件。
关于Yii:没有数据库服务器的单元测试模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15537435/