如何解决在 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 举报,一经查实,本站将立刻删除。