Testing

Ben Manes edited this page Mar 31, 2016 · 2 revisions
FakeTicker ticker = new FakeTicker(); // Guava's testlib
Cache<Key, Graph> cache = Caffeine.newBuilder()
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .executor(Runnable::run)
    .ticker(ticker::read)
    .maximumSize(10)
    .build();

cache.put(key, graph);
ticker.advance(30, TimeUnit.MINUTES)
assertThat(cache.getIfPresent(key), is(nullValue());

Testing timed eviction does not require that tests wait until the wall clock time has elapsed. Use the Ticker interface and the Caffeine.ticker(Ticker) method to specify a time source in your cache builder, rather than having to wait for the system clock. Guava's testlib provides a convenient FakeTicker for this purpose.

Caffeine delegates periodic maintenance, removal notifications, and asynchronous computations to an Executor. This provides more predictable response times by not penalizing the caller and uses ForkJoinPool.commonPool() by default. Use the Caffeine.executor(Executor) method to specify a direct (same thread) executor in your cache builder, rather than having to wait for the asynchronous tasks to complete.

We recommend Awaitility for multi-threaded testing.