gpt4 book ai didi

java - 如何在模拟 LocalDateTime 时模拟分钟值?

转载 作者:行者123 更新时间:2023-12-02 09:24:53 26 4
gpt4 key购买 nike

我引用了这个答案How can I mock java.time.LocalDate.now()关于如何模拟我的 LocalDateTime.now() 调用。我基本上遵循了所有步骤,但只是使用 LocalDateTime 而不是 LocalDate。

我的代码的功能应该只在每小时的第 15 或第 45 分钟运行。因此,我将 LOCAL_DATE_TIME 静态变量设置为以下内容:

private final static LocalDateTime LOCAL_DATE_TIME = LocalDateTime.of(2019,10,15,19,15,22);

然后在我的 @Before 测试方法中,我有以下内容:

    @Mock
private Clock clock;

private Clock fixedClock;
private final static LocalDateTime LOCAL_DATE_TIME = LocalDateTime.of(2019,10,15,19,15,22);

这是 2019-10-15T19:15:22。

    @Before
public void before(){
fixedClock = Clock.fixed(LOCAL_DATE_TIME.toLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant(), ZoneId.systemDefault());
doReturn(fixedClock.instant()).when(clock).instant();
doReturn(fixedClock.getZone()).when(clock).getZone();
}

这是我正在测试的代码

@Override
public void punctuate(long l) {
LocalDateTime localDateTime = LocalDateTime.now(clock);
int currentMinute = localDateTime.getMinute();

if(currentMinute == 15 || currentMinute == 45) { ....

当我在上面的第一行放置断点时,我看到 localDateTime 设置为 2019-10-15T00:00

所以看起来日期被 mock 得很好,但我无法 mock 时间。我应该怎么做才能模拟分钟值?

最佳答案

转换为 LocalDate 将删除 LocalDateTime 的时间部分,因此请勿这样做。

像这样初始化你的fixedClock:

fixedClock = Clock.fixed(
LOCAL_DATE_TIME.atZone(ZoneId.systemDefault()).toInstant(),
ZoneId.systemDefault()
);

关于java - 如何在模拟 LocalDateTime 时模拟分钟值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58404414/

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