Чтобы издеваться над статическим методом powermock, дающим исключение while expect().PowerMock :: [java.lang.IllegalStateException: no last call on mock available]
@Test
public void testRegistrarService()
{
mockStatic(IdGenerator.class);
expect(IdGenerator.generateNewId()).andReturn(42L);
long actualId=serTestObj.registerService();
replay(IdGenerator.class);
verify(IdGenerator.class);
assertEquals(42L,actualId);
}
public class ServiceRegistrator
{
public long registerService()
{
long id = IdGenerator.generateNewId();
return id;
}
}
public class IdGenerator
{
public static long generateNewId()
{
return System.currentTimeMillis();
}
}
Исключение:
java.lang.IllegalStateException: no last call on a mock available
at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:521)
at org.easymock.EasyMock.expect(EasyMock.java:499)
at home.powermock.testServiceRegistrator.testRegistrarService(testServiceRegistrator.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at com.intellij.rt.execution.junit2.JUnitStarter.main(JUnitStarter.java:31)
как издеваются staic метод, в то время как м при использовании powerMock я использую IntelliJ идея, как решить это исключение.
Является 'IdGenerator.generateNewId()' 'final' метод? Если это так, http://stackoverflow.com/questions/3494969/easymock-3-0-mocking-class-throws-java-lang-illegalstateexception-no-last-call является дубликатом. Кроме того, вы, возможно, пропустили вызов 'EasyMock.replay'. –
Я вызываю метод повтора здесь, как replay (IdGenerator.class); но он был пропущен здесь. – kin
IdGenerator.generateNewId() не является окончательным методом. Только статический метод. – kin