Как издеваться над Calendar.getInstance для Java тестирования с использованием Mockito? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть фрагмент кода для тестирования -

public class Test {

    public List<Long> getListExpiryTime(long time){
        List<Long> tempList = new ArrayList<Long>();
        tempList.add(getExpiryTime(time));
        return tempList;
    }


    private long getExpiryTime(long time) {
        long currentTime = Calendar.getInstance().getTimeInMillis();
        return time - currentTime / 1000;
    }

}

Я хочу проверить, имеет ли возвращаемый список определенное значение после того, как я укажу время ввода, и мы издеваемся над Calendar.getInstance().getTimeInMillis();. Как именно это сделать? Я предпочитаю делать это с помощью Mockito

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

Calendar.getInstance - это статический c метод, и его нельзя имитировать с помощью Mockito. PowerMockito может помочь, но я настоятельно рекомендую отказаться от Календаря и использовать новые API времени из java .time. В ваш бизнес-компонент внедряются часы, которые вы можете легко смоделировать с помощью Mockito.

0 голосов
/ 05 августа 2020

Создайте метод, например getCurrentTime(), который возвращает только Calendar.getInstance().getTimeInMillis(); в новом классе, например Helper.

Затем вы можете издеваться над этим методом следующим образом:

Calendar date = new GregorianCalendar();
date.set(...)
Mockito.when(helperMock.getCurrentTime()).thenReturn(date);
...