【问题标题】:Integration testing with spring declarative caching使用 Spring 声明式缓存进行集成测试
【发布时间】:2018-05-18 11:12:23
【问题描述】:

我正在尝试为 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 Endpoint 调用的服务使用Spring Caching 注解进行注解。因此,如果我这样做,测试将失败。我可以直接使用该服务或进行第二次 REST 调用。这会给使用相同值的其他测试带来问题,因为即使数据库回滚,缓存似乎也包含该值。 (现在我正在使用@DirtiesContext)。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 2015-08-12
      • 1970-01-01
      • 2012-09-17
      • 2014-08-04
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多