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

时间:2018-05-18 11:12:24

标签: spring spring-boot testing caching integration-testing

我正在尝试为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() {

    }
}

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

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

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

1 个答案:

答案 0 :(得分:4)

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