kevinkl3 / mongomock
包含高度智能的MongoDB模拟库,用于单元测试
Requires
- php: ^7.1.0 || ^8.0
- ext-json: *
- ext-mongodb: *
- mongodb/mongodb: ^1.0
- phpunit/phpunit: >=6.0,<10.0
- dev-master
- v2.6.3
- v2.6.2
- v2.6.1
- v2.6.0
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.1
- v2.2.0
- v2.1.0
- v2.0.0
- v1.x-dev
- v1.0.0
- v1.0.0-alpha3
- v1.0.0-alpha2
- v1.0.0-alpha1
- dev-feature/all-operator
- dev-fix/database-list-collections
- dev-fix/regex-with-in-operator
- dev-fix/array-functions-fail-against-bsonarray
- dev-fix/update-upsert-result
- dev-fix/exists-operator-can-be-parameterized
- dev-fix/delete-one
- dev-feature/regex-operator
- dev-master-backup
- dev-feature/support-phpunit9
- dev-feature/phpunit-8
- dev-cleanup
This package is not auto-updated.
Last update: 2024-09-19 07:56:26 UTC
README
作者和许可
Martin Helmich
此库使用MIT许可。
概述和动机
此类包含对MongoDB\Collection和MongoDB\Database类的实现(不要与已废弃的mongo扩展中的Mongo\Collection类混淆),这些类可以存储、修改和过滤内存中的文档,同时附带一系列(可选)PHPUnit断言。
我编写这个库是因为我想对一个大量使用MongoDB集合的库进行单元测试,并觉得使用PHPUnit内置的mock生成器模拟MongoDB\Collection类过于受限。
注意:目前,此实现仅包含实际MongoDB集合API的一部分。我只实现了我使用案例中需要的API部分。如果您需要其他功能,请随意提出问题,或者(更好的是)提交一个pull request。
安装
$ composer require --dev helmich/mongomock
兼容性
此库有多个发布分支,每个分支与PHPUnit和PHP的不同版本兼容。以下表格应提供简单的概述
当您使用composer require并且已经在composer.json文件中声明了对phpunit/phpunit的依赖时,Composer应自动选择最新的兼容版本。
用法
您可以使用此库,就像使用MongoDB\Collection或MongoDB\Database类一样(理论上至少如此——请记住,此包不是API完整的)
use Helmich\MongoMock\MockCollection; $collection = new MockCollection(); $collection->createIndex(['foo' => 1]); $documentId = $collection->insertOne(['foo' => 'bar'])->insertedId(); $collection->updateOne(['_id' => $documentId], ['$set' => ['foo' => 'baz']]);
差异
在某些方面,对MongoDB\Collection的API进行了扩展,以实现更好的可测试性
-
过滤器操作数可能包含应用于文档属性的回调函数
$r = $collection->find([ 'someProperty' => function($p) { return $p == 'bar'; } ]);
-
过滤器操作数可能包含PHPUnit约束(即
PHPUnit_Framework_Constraint类的实例)。您可以使用PHPUnit_Framework_Assert类中的工厂函数轻松构建这些约束。$r = $collection->find([ 'someProperty' => \PHPUnit_Framework_Assert::isInstanceOf(\MongoDB\BSON\Binary::class) ]);
测试
要运行测试(任何有运行Docker安装的地方)
$ docker-compose run php7phpunit
$ docker-compose run php8phpunit