我想知道是否有人有一个聪明的方法来测试一个redis密钥过期后的行为。我基本上是在为我的应用程序构建一个小的redis支持的缓存,并想测试在redis密钥设置为过期后会发生什么。
我使用rspec作为我的测试框架。我尝试使用Timecop在测试期间更改时间,但意识到这只会影响测试框架工作,而不会影响外部redis服务器。
我可以将TTL设置为1,然后使用睡眠(1),但我不希望在测试中引入睡眠。
有没有人有好的方法来测试这个?
发布于 2013-01-27 09:43:49
为什么不使用http://redis.io/commands/expire让密钥立即过期呢?
发布于 2014-04-11 00:40:33
为测试环境修复此问题的正确方法是模拟redis客户端,并使其返回期望值。我有信心redis会做正确的事情,并且被正确地实现,所以模拟这种交互可能比让测试真正击中redis要好。
redis_client.should_receive(:ttl).with(key).then_return(-1)或者只是模拟对密钥的请求
redis_client.should_receive(:get).with(key).then_return(nil)使用较新的RSpecs版本,
expect(redis_client).to receive(:get).with(key).and_return(value)https://stackoverflow.com/questions/14541111
复制相似问题