缓存一般设置的都有过期时间,如果我们写单元测试代码需要验证这个功能(缓存过期,自动删除)。假如设置的过期时间是1个小时,我们来验证1h后缓存是否被删除,那我们总不能让单元测试代码运行1个小时吧。
public class Demo{
public static void main(String[] args) {
// 自定义ticker
TestTicker testTicker = new TestTicker();
// 创建缓存,1小时没有访问则过期
Cache<String, byte[]> cache = CacheBuilder.newBuilder().ticker(testTicker).expireAfterAccess(1, TimeUnit.HOURS).build();
cache.put("id", new byte[1024 * 1024]);
// 模拟时间流逝
testTicker.addElapsedTime(TimeUnit.NANOSECONDS.convert(1, TimeUnit.HOURS));
System.out.println(cache.getIfPresent("id") == null);//true
}
private static class TestTicker extends Ticker {
private long start = Ticker.systemTicker().read();
private long elapsedNano = 0;
@Override
public long read() {
return start + elapsedNano;
}
public voi

本文介绍如何在Guava Cache中使用自定义Ticker进行单元测试,以验证缓存过期删除功能,避免长时间等待,通过改变时间源模拟时间流逝以加速测试过程。
最低0.47元/天 解锁文章
513

被折叠的 条评论
为什么被折叠?



