在 H2 上使用 current_timestamp 的模拟值进行测试
Testing with mocked value for current_timestamp on H2
有没有办法在 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
设置一个固定的(a.k.a 模拟)值,以避免在最终 current_timestamp
大于 [=25= 时中断此测试].
有没有其他更好的方法来获得 运行?
我想避免将 current_timesamp 作为查询参数传递。
您可以将 ;BUILTIN_ALIAS_OVERRIDE=TRUE
添加到 JDBC URL 并使用
为您自己的函数定义一个别名
CREATE ALIAS CURRENT_TIMESTAMP FOR "path.to.YourClass.staticMethod"
命令。
这种方法通常应该 return java.time.OffsetDateTime
(除非你使用一些过时的 H2 版本)。
H2 应该能够在 class 路径中找到您的 class(如果您使用 H2 服务器进程,则在服务器端)。
您可以直接使用 Java 代码代替 Java 方法:
CREATE ALIAS CURRENT_TIMESTAMP AS
'java.time.OffsetDateTime m() { return java.time.OffsetDateTime.of(2000, 1, 1, 0, 0, 0, 0, java.time.ZoneOffset.UTC); }';
在那种情况下,您需要在 class 路径中有一个 Java 编译器。
有关详细信息,请参阅 CREATE ALIAS 文档。
有没有办法在 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
设置一个固定的(a.k.a 模拟)值,以避免在最终 current_timestamp
大于 [=25= 时中断此测试].
有没有其他更好的方法来获得 运行? 我想避免将 current_timesamp 作为查询参数传递。
您可以将 ;BUILTIN_ALIAS_OVERRIDE=TRUE
添加到 JDBC URL 并使用
CREATE ALIAS CURRENT_TIMESTAMP FOR "path.to.YourClass.staticMethod"
命令。
这种方法通常应该 return java.time.OffsetDateTime
(除非你使用一些过时的 H2 版本)。
H2 应该能够在 class 路径中找到您的 class(如果您使用 H2 服务器进程,则在服务器端)。
您可以直接使用 Java 代码代替 Java 方法:
CREATE ALIAS CURRENT_TIMESTAMP AS
'java.time.OffsetDateTime m() { return java.time.OffsetDateTime.of(2000, 1, 1, 0, 0, 0, 0, java.time.ZoneOffset.UTC); }';
在那种情况下,您需要在 class 路径中有一个 Java 编译器。
有关详细信息,请参阅 CREATE ALIAS 文档。