This is my function that uses StringLong Redis Template, and stores multi values to Redis with a timeout. I am facing a problem verifying the save operation for each key.
private final RedisTemplate<String, Long> redis;
public void store(
List<String> keys,
List<Long> values,
long timeToLiveInSec
) {
RedisCallback<Object> action = connection -> {
Streams.forEachPair(
keys.stream(),
values.stream(),
(key, value) -> redis.opsForValue().set(key, value, timeToLiveInSec, TimeUnit.SECONDS);
);
return null;
};
redis.executePipelined(action);
}
I have this in my test
private RedisTemplate<String, Long> redis = mock(RedisTemplate.class);
private ValueOperations<String, Long> redisOps = mock(ValueOperations.class);
private final CacheRepository repository = new CacheRepository(redis);
@Test
void when_storeInCacheWithTimeout_then_verify() {
// Given
List<String> estimationKeys = asList(CACHE_KEY_1, CACHE_KEY_2);
List<Long> estimations = asList(10L, 20L);
// When
when(redis.opsForValue()).thenReturn(redisOps);
// Test
repository.storeEstimations(estimationKeys, estimations, 30);
// Then
verify(redis).executePipelined(any(RedisCallback.class));
}
question from:
https://stackoverflow.com/questions/65882473/unit-test-redis-template-executepipelined-for-multi-save-with-timeout 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…