【问题标题】:How to properly test Spring @Transactional timeout如何正确测试 Spring @Transactional 超时
【发布时间】:2018-06-04 10:48:10
【问题描述】:

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

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

如何测试(顺便说一下集成测试)超时异常下​​的条件会被抛出?我的存储库是CrudRepository 的扩展。

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

【问题讨论】:

  • 您不需要测试事务超时。它是 Spring 系统的一部分,而不是您的系统。
  • @DwB 我有你的意见,但我同意这篇文章中描述的所有方面:the-music-of-time.blogspot.com.br/2012/10/…。我喜欢考虑我在方法中描述的合同,删除它会大大改变它。

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


【解决方案1】:

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

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

postgres.config:
  timeout: 10

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2012-04-04
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多