我想测试由@Cacheable
注释缓存服务水平的方法。我现在用嘲讽的Mockito的服务。下面是我的缓存配置和实际测试
高速缓存没有被使用和验证的Mockito失败,被称为两次(而不是一次)的方法
我的缓存配置:
@Configuration
@EnableCaching
public class CacheConfiguration implements CachingConfigurer {
private static final Log LOG = LogFactory.getLog(CacheConfiguration.class);
@Override
@Bean
public CaffeineCacheManager cacheManager() {
CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager(
"sample-cache");
caffeineCacheManager.setCaffeine(caffeineCacheBuilder());
caffeineCacheManager.setAllowNullValues(false);
return caffeineCacheManager;
}
Caffeine<Object, Object> caffeineCacheBuilder() {
return Caffeine.newBuilder().maximumSize(50)
.expireAfterAccess(30, TimeUnit.MINUTES).softValues();
}
测试:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = *Application.class)
@AutoConfigureMockMvc
public class CachingIntegrationTest {
@MockBean
private Service service;
@Before
public void setUp() throws {
Mockito.reset(service);
String eg = "eg"''
Mockito.when(service.serviceMethod(argument))
.thenReturn(eg);
}
@Test
public void verifyCache() throws {
service.serviceMethod(argument);
service.serviceMethod(argument);
Mockito.verify(service, Mockito.times(1)).serviceMethod(argument);
}
我不知道是肯定的,但我会感到惊讶,如果@Cacheable
注释仍在工作,即使不实际使用的注释对象,而是它的一个模拟的Mockito。原因是,这两种技术(即面向方面编程注释@Cacheable
和嘲弄)与Java动态代理(或相当于生成字节码)来实现,所以他们很可能会在对方的方式来获得。
你应该做的,而不是嘲笑是你的服务的合作者,然后检查这些调用的次数。