使用 spring 声明式缓存进行集成测试

Ben*_*rer 0 testing spring integration-testing caching spring-boot

我正在尝试为 Spring Boot 2 应用程序编写集成测试。

一项测试应测试通过 REST 更新值。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureTestEntityManager
@Transactional
public class TenantEndpointIT {
    @Autowired
    private TestRestTemplate template;

    @Autowired
    private TestEntityManager entityManager;

    @Test
    public void nok_updateValueForbidden() {

    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我认为最TestEntityManager简洁的方法是在 @Before 方法中创建值,然后在实际测试中测试 REST 端点。

但是REST Endpoint 调用的服务使用 Spring Caching 注释进行了注释。所以如果我这样做,测试就会失败。我可以直接使用该服务或进行第二次 REST 调用。这会给使用相同值的其他测试带来问题,因为即使回滚数据库,缓存似乎也包含该值。(现在我正在使用@DirtiesContext)。

我的问题是,您如何正确地将测试服务与 @Cachable 集成?有没有办法获取缓存并显式放置/删除?我尝试自动装配 CacheManager,但它找不到并且失败了。

Ste*_*oll 5

如果您添加@AutoConfigureCache测试,它将覆盖您在应用程序中定义的任何缓存策略CacheManager。如果您想确保缓存不会干扰您的测试,这非常有用。