Powermock mockStatic not working

1,113 views
Skip to first unread message

swayam raina

unread,
Mar 31, 2017, 8:34:34 AM3/31/17
to PowerMock
Hi there!

I was trying to learn mocking of static methods of a class using powermock.
But after following the wiki on github to do so, still got exceptions.

Can anyone please help!!

HELP ME!!!


Stack trace ...

java.lang.IllegalStateException: no last call on a mock available
    at org
.easymock.EasyMock.getControlForLastCall(EasyMock.java:466)
    at org
.easymock.EasyMock.expect(EasyMock.java:444)
    at junit
.util.mock.Test.test1(Test.java:30)
    at sun
.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun
.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java
.lang.reflect.Method.invoke(Method.java:498)
    at org
.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316)
    at org
.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:88)
    at org
.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:96)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:288)
    at org
.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86)
    at org
.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:208)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:147)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121)
    at org
.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33)
    at org
.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45)
    at org
.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123)
    at org
.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121)
    at org
.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
    at org
.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
    at org
.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org
.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org
.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org
.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
    at org
.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org
.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)




Test class ...

package junit.util.mock;

import static org.junit.Assert.assertEquals;

import static org.powermock.api.easymock.PowerMock.mockStatic;
import static org.powermock.api.support.membermodification.MemberMatcher.constructor;

import org.easymock.EasyMock;
import static org.powermock.api.support.membermodification.MemberModifier.suppress;
import static org.easymock.EasyMock.expect;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.powermock.api.easymock.PowerMock.replayAll;

import org.powermock.api.easymock.annotation.Mock;

import abc.Testing;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Testing.class})
public class Test {

   
 
@org.junit.Test
 
public void test1() throws Exception {
    mockStatic
(Testing.class);
    expect
(Testing.getWord()).andReturn("from expect");
   
PowerMock.replay(Testing.class);
    assertEquals
(Testing.getWord(),"from expect");
     

 
}
}



Class under test ...


package abc;


public class Testing {
   
public static String getWord() {
       
return "from method";
   
}
}



WodenCafe

unread,
May 12, 2017, 9:33:04 AM5/12/17
to PowerMock

What version of PowerMock are you using?
Reply all
Reply to author
Forward
0 new messages