微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 H2 上使用 current_timestamp 的模拟值进行测试

如何解决在 H2 上使用 current_timestamp 的模拟值进行测试

有没有办法在 H2 上为 current_timestamp 设置一个固定值?

我有一个使用 H2 运行的测试,它使用 current_timestamp 来确定寄存器是否处于活动状态,如下所示:


select t from MyTable t
where t.enabled = true
  and current_timestamp between t.startDate and t.endDate

我想在此测试中为 current_timestamp 设置一个固定(也称为模拟)值,以避免在最终 current_timestamp 大于 e.endDate 时导致此测试中断。

还有其他更好的方法可以让它运行吗? 我想避免将 current_timesamp 作为查询参数传递。

解决方法

您可以将 ;BUILTIN_ALIAS_OVERRIDE=TRUE 添加到 JDBC URL 并使用

为您自己的函数定义别名
CREATE ALIAS CURRENT_TIMESTAMP FOR "path.to.YourClass.staticMethod"

命令。

此方法通常应返回 java.time.OffsetDateTime(除非您使用某些过时的 H2 版本)。

H2 应该能够在类路径中找到您的类(如果您使用 H2 服务器进程,则在服务器端)。

您可以直接使用 Java 代码代替 Java 方法:

CREATE ALIAS CURRENT_TIMESTAMP AS
'java.time.OffsetDateTime m() { return java.time.OffsetDateTime.of(2000,1,java.time.ZoneOffset.UTC); }';

在这种情况下,您需要在类路径中有一个 Java 编译器。

有关详细信息,请参阅 CREATE ALIAS 文档。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。