如何正确测试Spring @Transactional超时

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

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

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

我怎样才能测试(顺便进行集成测试)超时异常下​​的条件会被抛出?我的存储库是CrudRepository的扩展。

doTimeout(6000).when(repository).save(...)之类的东西

spring spring-boot spring-data-jpa transactional
1个回答
0
投票

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

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

postgres.config:
  timeout: 10

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

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