Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CakePHP中为特定模型设置测试数据源?_Php_Unit Testing_Cakephp - Fatal编程技术网

如何在CakePHP中为特定模型设置测试数据源?

如何在CakePHP中为特定模型设置测试数据源?,php,unit-testing,cakephp,Php,Unit Testing,Cakephp,开箱即用,CakePHP1.x有一个默认值和测试数据源。在运行单元测试时,它使用测试数据库,在每次测试之前,它可以从代码中修复数据,或者从默认数据库导入数据 在我正在构建的一个应用程序中,有两种情况下,在一些模型夹具中指定一个数据库而不是测试: 数据源是一个web服务,返回的数据不容易用测试数据库复制 存在大型只读表,在每次测试之前重新创建所有这些数据非常缓慢(而且不必要) 我已经看过了CakeTestFixture,但是我还没有找到一个好的方法。也许每个模型真的想要一个useDbConfig和

开箱即用,CakePHP1.x有一个
默认值
测试
数据源。在运行单元测试时,它使用测试数据库,在每次测试之前,它可以从代码中修复数据,或者从默认数据库导入数据

在我正在构建的一个应用程序中,有两种情况下,在一些模型夹具中指定一个数据库而不是
测试

  • 数据源是一个web服务,返回的数据不容易用测试数据库复制
  • 存在大型只读表,在每次测试之前重新创建所有这些数据非常缓慢(而且不必要)
  • 我已经看过了
    CakeTestFixture
    ,但是我还没有找到一个好的方法。也许每个模型真的想要一个
    useDbConfig
    useTestConfig
    属性

    在某些情况下,我可以通过以下方式解决此问题:

    function startTest() {
        $this->Flock =& ClassRegistry::init('Flock');
        $this->Flock->Sheep->useDbConfig = 'readonly_db';
        $this->Flock->Dog->useDbConfig = 'soap';
    }
    
    但这将只涵盖一个测试用例的特定依赖项,而在一组测试中这样做将是维护的噩梦


    有人遇到过类似的情况吗?您有解决方案吗?

    在database.php中创建$test db连接,其余的由cake负责。查看核心测试用例中的一些示例,您将看到没有添加任何特殊内容。

    嗨,dogmatic,谢谢您的回答。我的一些模型使用标准的测试数据库(已经设置好了,运行良好),一些模型引用了不同的数据源,因此这不会全面工作。开始认为每个数据源都需要在Cake的常规机制之外进行设置,例如,我设置了一个Cake不会弄乱的属性,如
    $myModel->customDataSource
    。然后,我可以手动
    query()
    此对象。我应该指出,这不是一个有趣的项目…也许你应该模拟数据源这是一个好主意,如果说它是一个巨大而令人不快的界面来模拟的话。但是一旦模拟,它仍然回到如何为测试框架内的每个模型正确指定模拟数据源的问题上,例如在我上面的无意义示例中,
    Sheep
    必须使用
    mock\u test
    Dog
    必须使用
    mock\u soap
    。发现这个:标记为“适合我”尽管没有给出解决方法。看起来没有蛋糕机制来做这件事,希望能在某个时候以一种不粗糙的方式围绕这件事进行编程。