Как выполнить модульное тестирование зависимого от времени метода с помощью JUnit - PullRequest
0 голосов
/ 26 января 2019

У меня есть следующий метод, который принимает метку времени UNIX и возвращает возраст в днях, часах или минутах. Я хочу протестировать его с помощью JUnit, но я не уверен, как бы я начал это делать, поскольку текущее время постоянно меняется. Любой совет? Спасибо!

Вот метод:

public static String getAge(long unixTime) throws Exception {
        long diff = (System.currentTimeMillis() / 1000) - unixTime;
    diff = diff / 60;
    if (diff < 60) {
        return Math.round(diff) + " m";
    }
    else
        diff /= 60;
    if (diff < 24) {
        return Math.round(diff) + " h";
    }
    else {
        diff /= 24;
        return Math.round(diff) + " d";
    }

}

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Я бы построил метку времени Unix в моем unitTest на основе текущего времени.Степень детализации метода достаточно грубая, поэтому разница в несколько миллисекунд между созданием аргумента и выполнением этого метода не будет существенной.Конечно, вам нужно держаться подальше от граничных условий, т. Е. UnixTime, через 60 минут и 24 часа.

public void testMinutes() {
    Instant minutesAgo = Instant.ofEpochMilli(System.currentTimeMillis() - 15 * 60 * 1000);
    String result = getAge(minutesAgo.getEpochSecond());
    assertSomething...
}

И так далее для часовых и дневных тестов.

0 голосов
/ 26 января 2019

Либо вы должны изменить дизайн метода, чтобы он принимал как текущее время, так и unixTime , или вам нужно отступить от чистого JUnit и использовать PowerMock, чтобы высмеивать System.currentTimeMillis () для возврата необходимого результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...