m6web/redis-mock

提供Redis PHP模拟库的库

v5.6.0 2023-05-02 19:20 UTC

README

PHP 7.1库,提供Redis PHP模拟以供测试。

目前仅支持predis

安装

$ composer require --dev m6web/redis-mock

函数

它目前模拟以下Redis命令

它模拟 MULTIDISCARDEXEC 命令,但没有事务行为,只是使接口流畅并返回每个命令的结果。PIPELINEEXECUTE 伪命令(客户端管道)也进行了模拟。EVALEVALSHAWATCHUNWATCH 只是存根——它们不会执行任何操作

用法

RedisMock库提供了一个工厂,可以构建你的Redis库的模拟类,可以直接注入到你的应用程序中

$factory          = new \M6Web\Component\RedisMock\RedisMockFactory();
$myRedisMockClass = $factory->getAdapterClass('My\Redis\Library');
$myRedisMock      = new $myRedisMockClass($myParameters);

以更简单的方式,如果你不需要用自定义参数实例化模拟类(例如,为了更容易使用Symfony配置文件注入模拟),你可以使用getAdapter而不是getAdapterClass来直接创建适配器

$factory     = new \M6Web\Component\RedisMock\RedisMockFactory();
$myRedisMock = $factory->getAdapter('My\Redis\Library');

警告!

  • RedisMock没有实现所有Redis功能和命令。如果父类使用不受支持的功能,模拟可能具有不期望的行为。
  • 存储是静态的,因此由所有实例共享。

注意:默认情况下,如果父类实现了不受支持的命令,工厂会抛出异常。如果你想在构建时部分使用模拟,可以在构建时指定第二个参数$factory->getAdapter('My\Redis\Library', true)。异常将在调用命令时抛出。

静态存储 & 多个服务器

RedisMock类中的存储按命名区域组织。默认区域的名称为空字符串'',但你可以通过在调用工厂的getAdapter方法时指定一个替代区域名称。

getAdapter($classToExtend, $failOnlyAtRuntime = false, $ignoreConstructor = true, $storage = '')

这允许模拟多个远程Redis服务器,每个服务器都有自己的存储区域。

然而,同一个区域在所有绑定到它的实例中仍然是静态共享的。

测试

开发环境由Vagrant提供,以及Xotelia箱

$ cp Vagrantfile.dist Vagrantfile
$ vagrant up
$ vagrant ssh
$ cd /vagrant
$ composer install
$ ./vendor/bin/atoum

致谢

Cytron团队M6 Web开发。
使用atoum进行测试。

许可证

RedisMock在MIT许可证下授权。