如何正确测试Spring @Transactional超时

时间:2017-12-21 18:01:20

标签: spring spring-boot spring-data-jpa transactional

我从PostgreSQL数据库和一个简单的CRUD服务/存储库(所有基于spring-boot的)获得了一个简单的API加载数据。我在服务层中将我的创建/更新方法标记为:

@Transactional(timeout=5)
public void create(Entity x){
   ... 
   repository.save(x) 
}

如何测试(顺便进行集成测试)将抛出超时异常下​​的条件?我的存储库是CrudRepository的扩展名。

doTimeout(6000).when(repository).save(...)

这样的东西

1 个答案:

答案 0 :(得分:0)

您应该参数化超时值并通过配置文件提供,然后在集成测试中将其设置为测试值。这允许您在生产配置文件中包含生产值,并在测试配置文件中测试值。

例如,在名为application-test.yaml的配置文件中有一个条目:

postgres.config:
  timeout: 10

然后将timeout=5替换为"${postgres.config.10:20}"。如果在没有特定配置文件的情况下启动应用程序,则20指定默认值。