Test – guava ticker cache expired
•
Java
Google guava tutorial says cache expiration can be tested with ticker
According to my understanding, I can use it to force quick expiration Am I right?
But I've tried the following code. It's useless. Do you have any suggestions?
@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 }
Solution
As long as you find the answer
Ticker can be used to skip time, but not for expiration time
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")); }
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码