gpt4 book ai didi

java - 在测试类中禁用@CreationTimestamp

转载 作者:行者123 更新时间:2023-12-01 22:13:05 25 4
gpt4 key购买 nike

所以我使用 Hibernate 的注释 @CreationTimestamp@UpdateTimestamp。它工作正常,但我在单元测试时遇到这种情况,我需要在特定日期创建对象。

我认为不可能停用此注释,因此我想到的第一件事就是删除它们并执行以下操作:

@PrePersist
public void prePersist() {
if (createdDate == null) {
createdDate = new Date();
}
}

我不喜欢这种方式,因为我必须仅为一个测试用例重构我的实体。

我认为更好的另一个解决方案是使用我需要的数据创建一个 sql 文件,并在运行测试之前使用 Spring 执行它。

您认为做到这一点的最佳方法是什么?

最佳答案

我在测试中遇到了同样的问题,我想出的最佳解决方案是:在 Clock.systemUTC 中模拟静态方法,因此它将返回 Clock.fixed()

try (MockedStatic<Clock> utilities = Mockito.mockStatic(Clock.class)) {
utilities.when(Clock::systemUTC)
.thenReturn(Clock.fixed(Instant.parse("2018-08-22T10:00:00Z"), ZoneOffset.UTC));
System.out.println(Instant.now()) //here perform actions in past
}
System.out.println(Instant.now()) // here perform in current time

关于java - 在测试类中禁用@CreationTimestamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58642218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com