在弹簧开机测试测试@Cacheable:咖啡因不缓存上调用MockBean

问题描述 投票:1回答:1

我想测试由@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);

    }
java spring spring-boot spring-test
1个回答
2
投票

我不知道是肯定的,但我会感到惊讶,如果@Cacheable注释仍在工作,即使不实际使用的注释对象,而是它的一个模拟的Mockito。原因是,这两种技术(即面向方面编程注释@Cacheable和嘲弄)与Java动态代理(或相当于生成字节码)来实现,所以他们很可能会在对方的方式来获得。

你应该做的,而不是嘲笑是你的服务的合作者,然后检查这些调用的次数。

© www.soinside.com 2019 - 2024. All rights reserved.