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

标签 yii

在不访问数据库服务器(或其他外部资源)的情况下,针对 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/

相关文章:

php - 如何在 Yii 中设置带有页面标题的站点名称

javascript - 使用 Yii 创建动态 JS

internationalization - 如何配置 YII i18n 功能以使用 gettext?

yii - YII中过滤器的主要用途是什么?

php - 如何在 Yii 中使用 xupload

php - Yii 单元测试 CDbException

php - Yii CDbCriteria sql

yii - 使用迁移创建具有主键的列

javascript - Yii - 将 onclick 事件与 CLinkPager 与每个寻呼机链接绑定(bind)

yii - 在 Yii 2 中执行查询时出现一般错误 SQLSTATE[HY000]