Yii:没有数据库服务器的单元测试模型

2 yii

在不访问数据库服务器(或其他外部资源)的情况下,针对Yii模型执行单元测试的首选/正确方法是什么?我发现的所有单元测试文档都建议您必须具有活动的数据库服务器,但是显然这对于​​单元测试而言并不理想。

对于它的价值,这是我的config / test.php和bootstrap.php:

<?php

return CMap::mergeArray(
    require(dirname(__FILE__).'/main.php'),
    array(
        'components'=>array(
            'fixture'=>array(
                'class'=>'system.test.CDbFixtureManager',
            ),
        ),
    )
);
Run Code Online (Sandbox Code Playgroud)

<?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);
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我得到:

CDbException: CDbConnection.connectionString cannot be empty.
Run Code Online (Sandbox Code Playgroud)

hij*_*ian 6

Yii作者的集成测试名称具有误导性。他们称它们为“单元”。实际上,如果您需要与数据库服务器建立连接,则不再需要进行单元测试。

如果要单独测试ActiveRecords,则首先应实现一个伪造的CDbConnection,该CDbConnection将映射到某些内存中的数据集(或基于文件系统的数据集)。Yii没有内置这样的东西。

之后,您只需做CActiveRecord::$db = new FakeDbConnection()自己的事bootstrap.php,我相信您根本不必更改现有的测试套件。