Как издеваться над ZonedDateTime и LocalTime? [Дубликат]

Ошибки округления с плавающей запятой. 0,1 не могут быть представлены точно в базе-2, как в базе-10, из-за недостающего простого коэффициента 5. Так же, как 1/3 принимает бесконечное число цифр для представления в десятичной форме, но составляет «0,1» в базе-3, 0.1 принимает бесконечное число цифр в базе-2, где оно не находится в базе-10. И компьютеры не имеют бесконечного объема памяти.

0
задан Atul Kumbhar 28 April 2016 в 07:29
поделиться

2 ответа

java.time.ZonedDateTime является окончательным системным классом, поэтому он может высмеивать только с помощью обходного пути . И обходной путь требует, чтобы класс, который использует издеваемый системный класс, добавляется к @PrepareForTest. Более подробную информацию вы найдете в документации .

Но событие, если возможно, чтобы издеваться над системными классами, я бы рекомендовал вам реорганизовать ваш код таким образом, чтобы не требовать насмешливых системных классов , Потому что не рекомендуется издеваться над классами , которых у вас нет. . Вы можете создать класс util со значимым методом.

1
ответ дан Arthur Zagretdinov 25 August 2018 в 00:58
поделиться

Создайте метод в вашем классе, например

public class SomeClass{

public static void main(String[] args) {
    LocalDateTime now = getCurrentLocalDateTime(); 
    System.out.println(now);
}

private LocalDateTime getCurrentLocalDateTime() {
    return LocalDateTime.now();
}

}

И в тестовом классе вы используете

@PrepareForTest(SomeClass.class)

@RunWith(PowerMockRunner.class)

В TestCase

LocalDateTime tommorow= LocalDateTime.now().plusDays(1);

SomeClass classUnderTest = PowerMockito.spy(new SomeClass());

PowerMockito.when(classUnderTest, "getCurrentLocalDateTime").thenReturn(tommorow);
0
ответ дан Sujith Johny 25 August 2018 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: