7

我想知道是否有人有一个聪明的方法来测试 redis 密钥过期后的行为。我实际上是在为我的应用程序构建一个小的 redis 支持缓存,并想测试在 redis 键设置为过期后会发生什么。

我使用 rspec 作为我的测试框架。我尝试在测试期间使用 Timecop 更改时间,但意识到它只会影响测试框架的工作,而不影响外部 redis 服务器。

我可以将 TTL 设置为 1,然后使用 sleep(1),但我不想在我的测试中引入 sleep。

有没有人有一个很好的方法来测试这个?

4

2 回答 2

8

为什么不使用http://redis.io/commands/expire立即使密钥过期?

于 2013-01-27T01:43:48.860 回答
1

为测试环境解决此问题的正确方法是模拟 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)
于 2014-04-10T16:40:32.527 回答