aloware / redis-mock
提供Redis扩展的PHP模拟库
Requires
- php: >=8.2
- ext-redis: >=5.3
- laravel/framework: ^9.0|^10.0
Requires (Dev)
- atoum/atoum: ~3.4||~4.0
- orchestra/testbench: ~3.8.0|^4.0|^5.0|^6.0|^7.0|^8.0
- phpunit/phpunit: ^7.0|^8.0|^9.5.10
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命令
它模拟了 MULTI、DISCARD 和 EXEC 命令,但没有事务行为,它们只是使接口流畅并返回每个命令的结果。PIPELINE 和 EXECUTE 伪命令(客户端流水线)也进行了模拟。EVAL、EVALSHA、WATCH 和 UNWATCH 仅是存根——它们不会执行任何操作
用法
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 Team的M6 Web开发。
使用atoum测试。
许可协议
RedisMock在MIT许可协议下授权。