Я не понимаю, почему PowerMock делает это так.PowerMock с окончательным классом Система и статический метод currentTimeMillis
Тест-класса
public class Testimpl {
public long test() {
long a = System.currentTimeMillis();
System.out.println("2: " + a);
return a;
}
}
Junit-класса
import static org.mockito.MockitoAnnotations.initMocks;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(System.class)
public class TestimplTest {
@InjectMocks
Testimpl testimpl;
@Before
public void setUp() throws Exception {
initMocks(testimpl);
PowerMockito.mockStatic(System.class);
}
@Test
public void test() {
PowerMockito.when(System.currentTimeMillis()).thenReturn(12345l);
System.out.println("1: " + System.currentTimeMillis());
long a = testimpl.test();
System.out.println("3: " + a);
}
}
Выход:
1: 12345
2: 1422547577101
3: 1422547577101
Почему это работает PowerMock/Mockito правильно в классе JUnit TestimplTest и не в исследуемом классе Testimpl?
Я использую jUnit 4.11 и Mockito 1.9.5 с PowerMock 1.6.1.
Благодарим за помощь.
Awesome..Had же проблема.Работа для меня. – TheLion
@ TheLion, вам удалось издеваться над 'System.currentTimeMillis'? Я читал https://github.com/powermock/powermock/wiki/PowerMock-Configuration, который по умолчанию PowerMock загружал все классы с помощью MockClassLoader. Класс загрузчик загружает и модифицирует все классы, кроме системных классов. Поэтому похоже, что мы не можем издеваться над статическими методами Java и должны писать обертки. Я написал один, и он работает: https://gist.github.com/MaksimDmitriev/202142b6345ae86a3fda7577390fb1bf. И этот https://gist.github.com/MaksimDmitriev/1ceea5c08abb5fa9dc485fce7f71f630 не делает –