EasyMock : static method and 'missing behavior definition for the preceding method call'? -
i have following core class messagesutil, returns message string specific bundle based on locale - getmessage() methods static
public class messagesutil { .. public static string getmessage(httpservletrequest request, string key, string bundle) { messageresources resources = (messageresources)request.getattribute(bundle); string message = resources.getmessage((locale)request.getsession().getattribute("org.apache.struts.action.locale"), key); return message; } }
i'm trying write unit test coverage business class calls messageutils object. same test code below shows how i'm mocking request , session, return messageresources , specific message keys
import com.infonova.easymock.annotation.mock; import org.apache.struts.util.messageresources; import org.junit.assert; import org.junit.test; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpsession; import java.util.locale; import static org.easymock.easymock.expect; public class mappingsutilseasymocktest { @mock private httpservletrequest request; @mock private httpsession session; @mock private messageresources messageresources; @test public void mockmessagesutiltests() { string key = "ordermanagement.error.general"; expect(request.getattribute("customermanagementresources")).andreturn(messageresources); // locale locale locale = locale.english; expect(session.getattribute("org.apache.struts.action.locale")).andreturn(locale); // locale specific string message resource expect(messageresources.getmessage(locale, key)).andreturn("this_is_the_result"); assert.assertequals(messagesutil.getmessage( request, key, customermanagementconstants.bundle_name), "this_is_the_result"); } }
i exception
java.lang.illegalstateexception: missing behavior definition preceding method call: httpservletrequest.getattribute("customermanagementresources") usage is: expect(a.foo()).andxxx() @ org.easymock.internal.mockinvocationhandler.invoke(mockinvocationhandler.java:42) @ org.easymock.internal.objectmethodsfilter.invoke(objectmethodsfilter.java:85) @ com.sun.proxy.$proxy10.getsession(unknown source)
but setting 'getattribute("customermanagementresources")' field in test setup.
note - have tried adding
replay();
before call target method there no difference.
so after work, easymock exception message says 'preceding' can considered mean 'next' method call. in case
(locale)request.getsession()
was next call class looking mock. add expect test resolved issue
expect(request.getsession()).andreturn(session).anytimes();
Comments
Post a Comment