### Question:
ShiroCaffeineCache implements Cache<K,V> { @Override public V put( K key, V value ) throws CacheException { return caffCache.asMap().put( key, value ); } ShiroCaffeineCache( Ticker ticker, long ttl, int maxCapacity, boolean useTTL );   ShiroCaffeineCache( Ticker ticker, Executor maintenanceExecutor, long ttl, int maxCapacity, boolean useTTL ); @Override V get( K key ); @Override V put( K key, V value ); @Override V remove( K key ); @Override void clear(); @Override int size(); @Override Set<K> keys(); @Override Collection<V> values();  }### Answer:
@Test public void shouldNotReturnExpiredValueThroughPut() { assertNull( cache.put( 1, "first" )); assertThat( cache.put( 1, "second" ), equalTo( "first" ) ); fakeTicker.advance( TTL + 1, MILLISECONDS ); assertNull( cache.put( 1, "third" ) ); }