【问题标题】:How to set test datasource for specific models in CakePHP?如何在 CakePHP 中为特定模型设置测试数据源?
【发布时间】:2023-03-12 15:14:01
【问题描述】:

开箱即用,CakePHP 1.x 有一个 defaulttest 数据源。运行单元测试时,它使用测试数据库,并且在每次测试之前,它可以固定代码中的数据,或从默认数据库中导入数据。

在我正在构建的应用程序中,我有几种情况,在某些模型装置中指定 test 以外的数据库会很有用:

  1. 数据源是 Web 服务,返回的数据不能轻易地复制到测试数据库中,
  2. 存在大型只读表,在每次测试之前重新创建所有这些数据非常慢(而且没有必要)。

我查看了CakeTestFixture,但我还没有找到一个好的方法来做到这一点。也许每个模型都真的想拥有useDbConfiguseTestConfig 属性?

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

function startTest() {
    $this->Flock =& ClassRegistry::init('Flock');
    $this->Flock->Sheep->useDbConfig = 'readonly_db';
    $this->Flock->Dog->useDbConfig = 'soap';
}

但这只会涵盖一个测试用例的特定依赖关系,并且在一组测试中执行此操作将是一场维护噩梦。

有没有人遇到过类似的情况,你有解决办法吗?

【问题讨论】:

  • 发现这个:cakephp.lighthouseapp.com/projects/42648/tickets/… 标记为“为我工作”,尽管没有给出解决方法。看起来没有 Cake 机制可以做到这一点,希望可以在某个时候以一种简单的方式围绕这个进行编程。

标签: php unit-testing cakephp


【解决方案1】:

在 database.php 中创建 $test db 连接,cake 将负责其余的工作。查看核心测试用例中的一些示例,您会发现并没有什么特别之处。

【讨论】:

  • 您好教条,感谢您的回答。我的一些模型使用标准测试数据库(已经设置好,工作正常),一些引用不同的数据源,所以这不会全面工作。
  • 开始认为每个数据源都需要与 Cake 的常规机制分开设置,例如我设置了一个像 $myModel->customDataSource 这样的属性,Cake 不会搞砸。然后我可以手动query() 这个对象。我应该指出,这不是一个有趣的项目......
  • 也许你应该模拟数据源
  • 这是一个好主意,如果是一个大而令人不快的模拟界面。但是一旦mock了,还是回到了如何在测试框架内为每个模型正确指定mock数据源的问题,比如我上面废话的例子,Sheep必须使用mock_testDog必须使用@ 987654326@.
猜你喜欢
  • 1970-01-01
  • 2015-10-10
  • 2013-04-30
  • 2014-12-31
  • 2015-06-06
  • 1970-01-01
  • 2015-06-15
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多