PHPUnit 测试:写入/从 Memcached 检索的问题
Posted
技术标签:
【中文标题】PHPUnit 测试:写入/从 Memcached 检索的问题【英文标题】:PHPUnit Test: issue with write into / retrieve from Memcached 【发布时间】:2021-12-26 17:33:54 【问题描述】:我使用 Laravel 6.20.31 版,在我的 phpUnit 测试中我无法使用 Memcached 存储或检索数据。
我在 phpunit.xml 中将 CACHE_DRIVER 更新为“memcached”:
...snip...
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="memcached"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<php>
在我的 PHPUnit 测试中:
Cache::store('memcached')->put('foo', 'bar');
\Log::debug(cache()->getMemcached()->getAllKeys()); // should return an array with all keys stored in Memcached but array is empty
在 PHPUnit 测试中不能使用 Memcached 吗? 还是我必须正确配置它?
更新:
dd(config('cache.stores.memcached')
返回
.^ array:5 [
"driver" => "memcached"
"persistent_id" => "bbsip"
"sasl" => array:2 [
0 => null
1 => null
]
"options" => []
"servers" => array:1 [
0 => array:3 [
"host" => "127.0.0.1"
"port" => "11211"
"weight" => 100
]
]
]
我的配置/cache.php
...snip...
'memcached' => [
'driver' => 'memcached',
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
'sasl' => [
env('MEMCACHED_USERNAME'),
env('MEMCACHED_PASSWORD'),
],
'options' => [
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],
更新 2: 我想在 PHPUnit 中专门使用 Memcached,因为测试应该涵盖在 Memcached 中存储数据的功能(在应用程序中 Memcached 工作得很好)。
【问题讨论】:
如果你尝试转储 (dd(config('cache.memcached')
),你会得到什么?看到这是[原始配置] (github.com/laravel/laravel/blob/…),那些ENV
是在测试运行时填充的吗?
@matiaslauriti dd(config('cache.memcached'));返回空值。我必须专门为 PHPUnit 配置它吗?如何?在应用程序上下文中,Memcached 工作得非常好。
对不起,正确的配置是config('cache.stores.memcached')
,我的错!也可以快速更新:无论您使用的是 Memcached、Redis 还是数据库,它都可以工作,因为您只需选择一个驱动程序,您不必测试 memcache 是否工作(您应该使用CACHE_DRIVER=array
,因为您在运行测试时甚至不需要服务),在这种情况下您正在测试框架(测试 Cache
外观或 cache
助手按预期工作并且已经由框架测试)...
没问题,我用返回值更新了我的帖子(不是空数组)。感谢您帮我调试!
再次查看我的评论,我已经更新了评论,但我认为您没有看到更新。您不需要“测试”缓存,因为这是一个框架/驱动程序问题(它已经过测试并且可以工作)。
【参考方案1】:
出于某种原因使用缓存助手之类的
cache()->getMemcached()->getAllKeys();
返回空数组但像这样的静态方法
Cache::store('memcached')->get('foo'));
按预期工作并返回键“foo”的值。
【讨论】:
以上是关于PHPUnit 测试:写入/从 Memcached 检索的问题的主要内容,如果未能解决你的问题,请参考以下文章