3

使用 MongoDB 和 PHPUnit 高效工作的最佳实践是什么?我应该(或可以)用什么来模拟访问 MongoDB 的对象?PHPUnit嘲弄,嘲弄,PhrophecyPhactory

4

2 回答 2

2

如果您查看 SQL 数据库的模拟数据,这里有很多意见。

  • 有些人建议使用内存中的 SQL 数据库。
  • 有些人只是模拟 ORM 调用并假设 ORM 到 DB 部分已经过测试。
  • 有些人只是使用“本地”数据库进行单元测试,而忽略了整个“模拟”概念。

鉴于对 SQL 缺乏共识,您更不可能在 MongoDB 等新数据库上找到共识。

我认为这里有一些重要的细节需要考虑。

  • 您是否使用某种形式的 ORM / ODM?直接就司机?
  • 您是否试图模拟与数据库的所有通信?您是否试图模拟 ODM?

如果您只是想模拟与 DB 的通信,那么理想的解决方案是 MongoDB 驱动程序的“假”实现。这可能需要做很多工作,因为编写驱动程序时从未考虑到“可模拟性”。

如果您有 ODM,那么您可以简单地模拟 ODM 调用并假设 ODM 正在完成它的工作。理想情况下,ODM 应该提供一些可模拟的接口,但并非总是如此。

同样,这个答案可以归结为您真正计划测试的内容以及您认为好的单元测试。不幸的是,这些产品中的大多数仍然很新,因此在这个领域几乎没有指导。

于 2011-12-27T00:13:00.427 回答
1

Phactory为模拟MongoDB 提供直接支持。

编辑:工厂不再维护。但是,我发现了一个名为php-mongomock似乎可以解决此问题的新项目:

<?php

use Helmich\MongoMock\MockCollection;

$collection = new MockCollection();
$collection->createIndex(['foo' => 1]);

$documentId = $collection->insertOne(['foo' => 'bar'])->insertedId();
$collection->updateOne(['_id' => $documentId], ['$set' => ['foo' => 'baz']]);
于 2015-05-11T02:47:25.410 回答