aloware/redis-mock

提供Redis扩展的PHP模拟库

dev-master 2023-03-21 13:19 UTC

This package is auto-updated.

Last update: 2024-09-07 16:03:46 UTC


README

PHP 8.2库,为您的测试提供Redis PHP模拟。

目前仅与phpredis一起工作

安装

$ composer require aloware/redis-mock:dev-master

函数

它目前模拟以下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 box

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

致谢

Cytron TeamM6 Web开发。
使用atoum测试。

许可协议

RedisMock在MIT许可协议下授权。