使用MongoDB和PHPUnit高效工作的最佳做法是什么?应该(或可以)使用什么来模拟访问MongoDB的对象? PHPUnit Mocker,Mockery,Phrophecy,Phactory?
答案 0 :(得分:2)
如果你看一下SQL数据库的模拟数据,这里有很多意见。
鉴于对SQL缺乏共识,你甚至不太可能在像MongoDB这样的新数据库上找到共识。
我认为这里有一些重要的细节需要考虑。
如果您只是想模拟与DB的通信,那么理想的解决方案是MongoDB驱动程序的“假”实现。这可能是很多工作,因为驱动程序从来没有考虑过“可模仿性”。
如果您有ODM,那么您可以简单地模拟ODM调用并假设ODM正在执行其工作。理想情况下,ODM应该提供一些可模拟的接口,但情况并非总是如此。
同样,这个答案可以追溯到你真正计划测试的内容以及你认为是一个好的单元测试。不幸的是,大多数这些产品仍然很新,所以在这个领域几乎没有什么指导。
答案 1 :(得分:0)
Phactory为模拟MongoDB提供直接支持。
编辑:不再维护Phactory。但是,我发现了一个名为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']]);