测试 – Guava Ticker Cache过期
发布时间:2020-05-24 10:13:33 所属栏目:Java 来源:互联网
导读:Google Guava教程称缓存过期可以用 Ticker进行测试 根据我的理解,我可以用它来强制快速过期.我对吗? 但我试过以下代码,它没有用,有什么建议吗? @Testpublic void expireAfterWriteTestWithTicker() throws InterruptedException { Ticker t = new Ticker()
|
Google Guava教程称缓存过期可以用 Ticker进行测试 根据我的理解,我可以用它来强制快速过期.我对吗? 但我试过以下代码,它没有用,有什么建议吗? @Test
public void expireAfterWriteTestWithTicker() throws InterruptedException {
Ticker t = new Ticker() {
@Override
public long read() {
return TimeUnit.MILLISECONDS.toNanos(5);
}
};
//Use ticker to force expire in 5 millseconds
LoadingCache<String,String> cache = CacheBuilder.newBuilder()
.expireAfterWrite(20,TimeUnit.MINUTES).ticker(t).build(loader);
cache.getUnchecked("hello");
assertEquals(1,cache.size());
assertNotNull(cache.getIfPresent("hello"));
//sleep
Thread.sleep(10);
assertNull(cache.getIfPresent("hello")); //failed
}
解决方法只要自己找到答案Ticker可用于跳过时间,但不能用于到期时间 class FakeTicker extends Ticker {
private final AtomicLong nanos = new AtomicLong();
/** Advances the ticker value by {@code time} in {@code timeUnit}. */
public FakeTicker advance(long time,TimeUnit timeUnit) {
nanos.addAndGet(timeUnit.toNanos(time));
return this;
}
@Override
public long read() {
long value = nanos.getAndAdd(0);
System.out.println("is called " + value);
return value;
}
}
@Test
public void expireAfterWriteTestWithTicker() throws InterruptedException {
FakeTicker t = new FakeTicker();
// Use ticker to force expire in 20 minute
LoadingCache<String,TimeUnit.MINUTES).ticker(t).build(ldr);
cache.getUnchecked("hello");
assertEquals(1,cache.size());
assertNotNull(cache.getIfPresent("hello"));
// add 21 minutes
t.advance(21,TimeUnit.MINUTES);
assertNull(cache.getIfPresent("hello"));
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
