webgriffe / in-memory-repository
一个带有内存存储的 Doctrine 仓库实现。
0.2.0
2023-12-05 09:01 UTC
Requires
- php: ^8.0
- doctrine/collections: ^1.8|^2.1
- doctrine/persistence: ^2.3|^3.2
Requires (Dev)
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^9.6
- vimeo/psalm: ^4.30
This package is auto-updated.
Last update: 2024-09-05 10:39:18 UTC
README
这个库是 Doctrine\Persistence\ObjectRepository
接口的“内存”实现。它可以用来对依赖于 Doctrine 仓库的组件进行单元测试,而不需要涉及真实的数据库。
安装
将其添加到您的“dev”依赖中
composer require --dev webgriffe/in-memory-repository
用法
假设您正在构建一个电影管理应用程序,并且您有一个 Doctrine 的 MovieRepository
(它实现了 MovieRepositoryInterface
),该仓库被您的服务用于从数据库中获取电影。
现在,假设您想要对依赖于此 MovieRepository
的服务进行单元测试,您希望创建一个 MovieRepositoryInterface
的“内存”实现。
使用这个小型库,您可以轻松地做到这一点
<?php namespace MyMovieApp\Tests\Repository\InMemory; use MyMovieApp\Model\Movie; use MyMovieApp\Repository\MovieRepositoryInterface; use Webgriffe\InMemoryRepository\ObjectRepository; /** * @extends ObjectRepository<array-key,Movie> */ final class MovieRepository extends ObjectRepository implements MovieRepositoryInterface { }
就这样!您已经有一个 MovieRepositoryInterface
的“内存”实现。您可以在测试中使用它,如下所示
$movieRepository = new \MyMovieApp\Tests\Repository\InMemory\MovieRepository(); $movieRepository->objectCollection->add(new Movie('Rambo')); $movieRepository->objectCollection->add(new Movie('Top Gun')); $this->assertCount(2, $movieRepository->findAll()); $this->assertEquals(new Movie('Rambo'), $movieRepository->findOneBy(['title' => 'Rambo']));
许可证
此插件位于 MIT 许可证之下。请参阅 LICENSE 文件中的完整许可证。
致谢
由 Webgriffe® 开发。