小编Bob*_*Bob的帖子

将 Postgres 的 current_timestamp 设置为常量以进行 JUnit 测试?

我正在使用 JUnit 来测试访问 Postgres 数据库的存储库。

我的所有测试数据都是手动设置的,因此我确切地知道我期望在结果中得到什么值。我在测试使用的语句时遇到了麻烦current_timestamp,例如select * from phone_number where current_timestamp <= expires;

问题是我的测试数据是恒定的,但current_timestamp随着每次测试执行而随时间推移。

有没有办法让current_timestamp返回值恒定?

当然,这将是多种选择之一,我还有三种解决方案:

  • 在我的测试数据中定义一个基准日期(即纪元,类似base_date timestamp default current_time)。所有其他数据被定义为该纪元数据之后的间隔(例如base_date + interval '1 day')。了解测试的大致运行时间后,我可以设置expires在测试期间绝对不会超出的时间戳(例如,base_date运行时间为秒后的几小时后)。不过,在我的测试数据中包含变量值会使检查变得更加困难。
  • 我可以停止使用current_timestamp并在我的所有语句中使用额外的时间戳参数,在正常使用(在Java中)中将类似于System.currentTimeMillis()new java.util.Date()(在任何情况下,“现在”),并且在我的测试中我可以传递恒定日期。不过,我不喜欢这个解决方案,因为a)它引入了正常使用(测试之外)中不需要的更改b)附加参数是附加错误的来源。
  • 定义一个存储过程,current_timestamp除非存在某个值(表明“测试模式”已打开),否则该过程将返回,并且应返回一个常量。这实际上可能效果最好,但如果 Postgres 中有一种简单的方法来控制current_timestamp返回的内容,则可能没有必要。

java postgresql junit

6
推荐指数
1
解决办法
1103
查看次数

标签 统计

java ×1

junit ×1

postgresql ×1