0
votes

The code I have written simply mocks a static method using powermock.

On running the test case, no last call on a mock available is thrown.

On debugging, found out it is thrown during expect statement.

Stack trace for the exception throwm :

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:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
....
....

Test class written:

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.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.powermock.api.easymock.PowerMock.replayAll;

import Testing;

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

 @org.junit.Test
 public void test1() {
mockStatic(Testing.class);
expect(Testing.getWord()).andReturn("my Cal").anyTimes();
PowerMock.replay(Testing.class);
PowerMock.verify(Testing.class);
assertEquals(Testing.getWord(),"my Cal");
}
}

Class under test :

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

1 Answers

0
votes

I tried you code and it worked perfectly. So I'm not sure what to say. One thing that is not correct is that the verify should be at the end. But that's not what cause the issue.

I can give you the dependencies I used in case it was related to that.

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.easymock</groupId>
  <artifactId>easymock</artifactId>
  <version>3.4</version>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-core</artifactId>
  <version>1.6.6</version>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-api-easymock</artifactId>
  <version>1.6.6</version>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-module-junit4</artifactId>
  <version>1.6.6</version>
</dependency>