### Question:
RedisIdempotentMessageService implements IdempotentMessageService { @Override public void save(Message message) { log.debug("Saving metadata for message with id {} and consumer queue name {}", message.getId(), message.getConsumerQueueName()); String key = getKey(message.getId(), message.getConsumerQueueName()); fencyRedisTemplate.opsForValue().set(key, message); }  @Override void save(Message message); @Override Optional<Message> find(String messageId, String consumerQueueName); @Override void clean();  }### Answer:
@SuppressWarnings("unchecked") @Test void testSave() { Message message = IdempotencyTestUtils.createIdempotentMessage(); ValueOperations mValueOperations = mock(ValueOperations.class); given(mRedisTemplate.opsForValue()).willReturn(mValueOperations); idempotentMessageService.save(message); verify(mRedisTemplate).opsForValue(); }