如何使用powermockito模拟java日历

n9vozmp4  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(443)

我想通过使用powermockito模拟以下方法以返回true。

private boolean isResetPswrdLinkExpired(Timestamp timestamp) {

        Calendar then = Calendar.getInstance();
        then.setTime(timestamp);
        then.getTime();
        Calendar now = Calendar.getInstance();
        Long diff = now.getTimeInMillis() - then.getTimeInMillis();
        if (diff < 24 * 60 * 60 * 1000) {
            return false;
        } else {
            return true;
        }
    }
368yc8dk

368yc8dk1#

不要使用 Calendar ,使用 java.time 相反(总是,不只是为了这个;查看该方法的可读性)。与 java.time ,您可以使用 Clock 用于测试。

class PasswordManager

    @Setter
    private Clock clock = Clock.systemUTC();

    private boolean isExpired(Instant timestamp) {
        return timestamp.plus(1, DAYS).isBefore(Instant.now(clock));
    }

在你的测试中,

passwordManager.setClock(Clock.fixed(...));

(注意:也要避免 if(...) { return true } else { return false} 或者相反。相反,照我说的做 return !(diff < ...) 直接。)

相关问题