Mocking Static Method and getting error "No Last call on a Mock available"

10,233 views
Skip to first unread message

Sumit

unread,
Nov 23, 2010, 5:37:34 PM11/23/10
to PowerMock
hi,

I have a method, that I am trying to test

public ModelAndView getPlaylist(HttpServletRequest req){
Map <String,String[]>parameters = new
HashMap(req.getParameterMap());
parameters.remove("_dc");
String referrer= parameters.get("referrer")[0];
Iterator<String> it = parameters.keySet().iterator();
StringBuffer queryStringBuff= new StringBuffer();
for(String key: parameters.keySet()) {

String value = parameters.get(key)[0];
queryStringBuff.append(key + "=" + value);
queryStringBuff.append("&");

}
String queryString = queryStringBuff.toString();

Object result= mediaLogic.getSearchResult(queryString,referrer,
User.get().getIrn());
return controllerUtil.convertIfPodExists(result,"rss");
}


Here is the test method

@RunWith(PowerMockRunner.class)
@PrepareForTest(User.class)
public class TestMediaController{

MediaController obj = new MediaController();


@Test
public void testGetPlaylist(){
mockStatic(User.class);
MockHttpServletRequest req = new MockHttpServletRequest();
req.addParameter("id", "1");
req.addParameter("referrer", "2");
User user = new User();
expect(User.get()).andReturn(user);
//when(user.getIrn()).thenReturn("12345");
expect(user.getIrn()).andReturn("1234");
obj.getPlaylist(req);

}

}

When I execute this test I get, Please help me with any suggestions.

java.lang.IllegalStateException: no last call on a mock available
at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:202)
at org.easymock.EasyMock.expect(EasyMock.java:183)
at
edu.apollogrp.webcms.services.web.controllers.TestMediaController.testGetPlaylist(TestMediaController.java:
44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl
$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:
322)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:
86)
at
org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:
94)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl
$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:
309)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl
$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:
297)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:
84)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:
222)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:
161)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl
$1.run(PowerMockJUnit44RunnerDelegateImpl.java:135)
at
org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:
34)
at
org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:
44)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:
133)
at
org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:
112)
at
org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:
55)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
49)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
197)

Johan Haleby

unread,
Nov 24, 2010, 2:09:22 AM11/24/10
to powe...@googlegroups.com
Hi,

I suppose you get the error on this line:
expect(user.getIrn()).andReturn("1234");

That's because your user instance is not a mock object. You can only setup expectations for mocks (e.g. you need to do User user = createMock(User.class)).

/Johan


--
You received this message because you are subscribed to the Google Groups "PowerMock" group.
To post to this group, send email to powe...@googlegroups.com.
To unsubscribe from this group, send email to powermock+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/powermock?hl=en.


Reply all
Reply to author
Forward
0 new messages