模拟 LocalDateTime 时如何模拟分钟值?
How to mock the minute value when mocking LocalDateTime?
关于如何模拟我的 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
看来日期被模拟得很好,但我无法模拟时间。我应该怎么做才能模拟分钟值?
转换为 LocalDate
会删除 LocalDateTime
的时间部分,所以不要那样做。
像这样初始化您的 fixedClock
:
fixedClock = Clock.fixed(
LOCAL_DATE_TIME.atZone(ZoneId.systemDefault()).toInstant(),
ZoneId.systemDefault()
);
关于如何模拟我的 LocalDateTime.now() 调用,我参考了这个答案
我的代码的功能应该只 运行 在一小时的第 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
看来日期被模拟得很好,但我无法模拟时间。我应该怎么做才能模拟分钟值?
转换为 LocalDate
会删除 LocalDateTime
的时间部分,所以不要那样做。
像这样初始化您的 fixedClock
:
fixedClock = Clock.fixed(
LOCAL_DATE_TIME.atZone(ZoneId.systemDefault()).toInstant(),
ZoneId.systemDefault()
);