【发布时间】:2015-05-25 06:35:05
【问题描述】:
我正在尝试在 RedisTemplate 中测试 expire 方法。例如,我将会话存储在 redis 中,然后尝试检索会话并检查值是否相同。对于过期会话,我使用 redisTemplate 的 expire() 方法,而对于过期会话,我使用 getExpire() 方法。但它不起作用。如何测试存储在 redis 中的值?
//without import and fields
public class Cache() {
private StringRedisTemplate redisTemplate;
public boolean expireSession(String session, int duration) {
return redisTemplate.expire(session, duration, TimeUnit.MINUTES);
}
}
//Test class without imports and fields
public class TestCache() {
private Cache cache = new Cache();
@Test
public void testExpireSession() {
Integer duration = 16;
String session = "SESSION_123";
cache.expireSession(session, duration);
assertEquals(redisTemplate.getExpire(session, TimeUnit.MINUTES), Long.valueOf(duration));
}
}
但测试失败并出现 AssertionError:
预期:16 实际:0
更新: 我以为 getExpire() 方法不起作用,但实际上 expire() 方法不起作用。它返回假。 redisTemplate 是一个自动装配到测试类的 Spring Bean。 TestCache 类中还有许多其他测试方法可以正常工作。
【问题讨论】:
-
密钥是否存在,要过期吗?您的代码不包含创建密钥的部分。如果可以应用过期,
expire返回 true。有关详细信息,请参阅redis.io/commands/pexpire。 -
session,我作为参数发送给
redisTemplate.expire()是一个键String session = "SESSION_123"; -
我的意思是,在您的 redis 实例上进行测试时是否存在密钥“SESSION_123”。
-
它必须存在。在我的代码中,我使用该密钥使会话到期。我在课前启动redis服务器,课后停止。
-
不知道为什么,redisTemplate从
expire()方法返回false
标签: java unit-testing session redis