You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:57:02