我想知道是否有人有一个聪明的方法来测试 redis 密钥过期后的行为。我实际上是在为我的应用程序构建一个小的 redis 支持缓存,并想测试在 redis 键设置为过期后会发生什么。
我使用 rspec 作为我的测试框架。我尝试在测试期间使用 Timecop 更改时间,但意识到它只会影响测试框架的工作,而不影响外部 redis 服务器。
我可以将 TTL 设置为 1,然后使用 sleep(1),但我不想在我的测试中引入 sleep。
有没有人有一个很好的方法来测试这个?
我想知道是否有人有一个聪明的方法来测试 redis 密钥过期后的行为。我实际上是在为我的应用程序构建一个小的 redis 支持缓存,并想测试在 redis 键设置为过期后会发生什么。
我使用 rspec 作为我的测试框架。我尝试在测试期间使用 Timecop 更改时间,但意识到它只会影响测试框架的工作,而不影响外部 redis 服务器。
我可以将 TTL 设置为 1,然后使用 sleep(1),但我不想在我的测试中引入 sleep。
有没有人有一个很好的方法来测试这个?
为什么不使用http://redis.io/commands/expire立即使密钥过期?
为测试环境解决此问题的正确方法是模拟 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)