我有一个使用 Spring Boot 2 的应用程序。我想测试一个带有@Cacheable (Spring Cache) 的方法。我做了一个简单的例子来展示这个想法:
@Service
public class KeyService {
@Cacheable("keyCache")
public String getKey() {
return "fakeKey";
}
}
Run Code Online (Sandbox Code Playgroud)
和测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
public class KeyServiceTest {
@Autowired
private KeyService keyService;
@Test
public void shouldReturnTheSameKey() {
Mockito.when(keyService.getKey()).thenReturn("key1", "key2");
String firstCall = keyService.getKey();
assertEquals("key1", firstCall);
String secondCall = keyService.getKey();
assertEquals("key1", secondCall);
}
@EnableCaching
@Configuration
static class KeyServiceConfig {
@Bean
KeyService keyService() {
return Mockito.mock(KeyService.class);
}
@Bean
CacheManager cacheManager() {
return new ConcurrentMapCacheManager("keyCache");
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的例子不起作用。但是,如果我更改getKey()接收参数的方法: …