Я пытаюсь издеваться над классом System, чтобы получить постоянное значение для currentTimeMillis (). Поскольку я не могу использовать Mockito для имитации финальных классов, я использую PowerMock, но при насмешке над System.currentTimeMillis () я получаю сообщение об ошибке «Невозможно разрешить метод, когда (долго)».

Мой код выглядит так:

PowerMockito.mockStatic(System.class);
when(System.currentTimeMillis()).thenReturn(CURRENT_TIME_STAMP);

Я также отметил свой класс как:

@RunWith(PowerMockRunner.class)
@PrepareForTest(System.class)
public class DateTimeUtilsTest {
0
Karan Khanna 13 Мар 2018 в 14:38

2 ответа

Лучший ответ

Решено .

Это должно быть похоже

PowerMockito.when(System.currentTimeMillis()).thenReturn(CURRENT_TIME_STAMP);

Или импортируйте PowerMockito статически, как

import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;

Точно так же можно имитировать любой из методов класса System или любой другой конечный класс.

1
Karan Khanna 13 Мар 2018 в 11:51

Вот почему вы должны сначала писать тесты, а затем не писать непроверяемый код.

Ваш код не должен напрямую обращаться к статике переходных процессов, а должен через компонент, который вы можете имитировать.

1
Paul Janssens 13 Мар 2018 в 12:56