簡體   English   中英

mocking LocalDateTime 時如何模擬分鍾值?

[英]How to mock the minute value when mocking LocalDateTime?

我參考了這個答案How can I mock java.time.LocalDate.now()關於如何模擬我的 LocalDateTime.now() 調用。 我基本上遵循了所有步驟,但只使用了 LocalDateTime 而不是 LocalDate。

我的代碼的功能應該只在每小時的第 15 或第 45 分鍾運行。 因此,我將 LOCAL_DATE_TIME static 變量設置為以下內容:

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()
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM