@RestClientTest中测试Spring Boot缓存失效,如何调整配置?
问题根源
@RestClientTest 是Spring Boot提供的REST客户端切片测试注解,默认仅加载和REST客户端调用相关的自动配置,不会加载缓存自动配置、AOP代理增强这类和切片无关的组件。
你在业务类上加的@EnableCaching以及@Cacheable注解需要缓存AOP代理支持才能生效,而@RestClientTest的上下文默认没有处理这类注解,相当于缓存逻辑完全没有生效,两次调用都会直接执行方法内的RestTemplate请求逻辑,所以Mock服务端会收到两次请求。
解决方案
只需要在测试类上主动添加@EnableCaching注解,开启缓存注解的代理支持即可,修改后的测试代码如下:
@RestClientTest(CachedResourceClient.class) @EnableCaching // 主动开启缓存注解处理 public class CachedResourceClientTests { @Autowired private MockRestServiceServer server; @Autowired private CachedResourceClient cachedResourceClient; @Test public void fetchResource() throws JsonProcessingException { // 注意原测试返回的JSON格式不合法,这里修正了引号避免序列化报错 server.expect(requestTo("/resource")) .andRespond(withSuccess("{ \"resource\": \"some\" }", MediaType.APPLICATION_JSON)); cachedResourceClient.fetchResource(); cachedResourceClient.fetchResource(); server.verify(); } }
如果添加@EnableCaching后仍不生效,可以额外导入缓存和AOP的自动配置:
@RestClientTest(CachedResourceClient.class) @EnableCaching @ImportAutoConfiguration({CacheAutoConfiguration.class, AopAutoConfiguration.class}) public class CachedResourceClientTests { // 测试逻辑不变 }
修改后再次执行测试,缓存逻辑会正常生效,仅第一次调用会发起REST请求,server.verify()会校验通过。
内容的提问来源于stack exchange,提问作者chrsi
相关产品推荐
相关产品推荐

