webgriffe/in-memory-repository

一个带有内存存储的 Doctrine 仓库实现。

0.2.0 2023-12-05 09:01 UTC

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® 开发。