Ошибки округления с плавающей запятой. 0,1 не могут быть представлены точно в базе-2, как в базе-10, из-за недостающего простого коэффициента 5. Так же, как 1/3 принимает бесконечное число цифр для представления в десятичной форме, но составляет «0,1» в базе-3, 0.1 принимает бесконечное число цифр в базе-2, где оно не находится в базе-10. И компьютеры не имеют бесконечного объема памяти.
java.time.ZonedDateTime
является окончательным системным классом, поэтому он может высмеивать только с помощью обходного пути . И обходной путь требует, чтобы класс, который использует издеваемый системный класс, добавляется к @PrepareForTest
. Более подробную информацию вы найдете в документации .
Но событие, если возможно, чтобы издеваться над системными классами, я бы рекомендовал вам реорганизовать ваш код таким образом, чтобы не требовать насмешливых системных классов , Потому что не рекомендуется издеваться над классами , которых у вас нет. . Вы можете создать класс util со значимым методом.
Создайте метод в вашем классе, например
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);