You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Michael Menzies (JIRA)" <ji...@apache.org> on 2012/05/28 18:10:23 UTC
[jira] [Commented] (WW-3826) Unit Testing A Portlet Action Using
StrutsTestCase Causes A NullPointerException
[ https://issues.apache.org/jira/browse/WW-3826?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13284449#comment-13284449 ]
Michael Menzies commented on WW-3826:
-------------------------------------
I ran into the same issue. I do believe that this is something that should be address... but there is a relatively easy workaround to get it to work.
Basically it's a matter of mocking your PortletContext as needed. It's throwing a NPE in the PortletStateInterceptor because there is no phase defined in the context. There's a few other things that the context needs too. Here's my solution (using jMock to mock the PortletResponse):
{code}
protected void prepareActionForTesting(final ActionProxy proxy) throws Exception
{
final Mockery context = new Mockery();
portletRequest = new MockPortletRequest();
portletResponse = context.mock(ActionResponse.class);
context.checking(new Expectations() {
{
allowing(portletResponse).setRenderParameter(
with(any(String.class)),with(any(String.class)));
allowing(portletResponse).setPortletMode(
with(any(PortletMode.class)));
}
});
portletSession = new MockPortletSession();
portletRequest.setSession(portletSession);
final ActionContext actionContext = proxy.getInvocation().getInvocationContext();
actionContext.setSession(session);
actionContext.put(PortletConstants.REQUEST,portletRequest);
actionContext.put(PortletConstants.RESPONSE,portletResponse);
actionContext.put(PortletConstants.MODE_NAMESPACE_MAP,new HashMap<PortletMode, String>());
actionContext.put(PortletConstants.PHASE, PortletPhase.EVENT_PHASE);
}
{code}
> Unit Testing A Portlet Action Using StrutsTestCase Causes A NullPointerException
> --------------------------------------------------------------------------------
>
> Key: WW-3826
> URL: https://issues.apache.org/jira/browse/WW-3826
> Project: Struts 2
> Issue Type: Bug
> Components: Plugin - Portlet
> Affects Versions: 2.3.4
> Environment: JUnit 4.8.2 - Struts version 2.3.4
> Reporter: Bruce Phillips
> Fix For: 2.3.5
>
>
> When running a unit test of a Struts portlet Action using StrutsTestCase the test causes an error -
> java.lang.NullPointerException at org.apache.struts2.portlet.interceptor.PortletStateInterceptor.intercept(PortletStateInterceptor.java:52)
> (see below for complete stack trace)
> The same test when run with Struts portlet plugin version 2.2.1 passes.
> You can download an example application here: http://www.brucephillips.name/struts/Struts2CRUDPortletExample_Finish.zip. Unzip the example. In the project's root folder run mvn -e clean test. The test will pass.
> Modify pom.xml in the project to set the version number of Struts to 2.3.4. Remove the dependency on javaassist. Save the pom.xml
> In the project's root folder run mvn -e clean test. The test will error. View the test report in target/surfire-reports.
> -------------------------------------------------------------------------------
> Test set: com.struts2.tutorial.action.ListEmployeeActionTest
> -------------------------------------------------------------------------------
> Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.185 sec <<< FAILURE!
> testExecute(com.struts2.tutorial.action.ListEmployeeActionTest) Time elapsed: 0.998 sec <<< ERROR!
> java.lang.NullPointerException
> at org.apache.struts2.portlet.interceptor.PortletStateInterceptor.intercept(PortletStateInterceptor.java:52)
> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
> at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
> at com.struts2.tutorial.action.ListEmployeeActionTest.testExecute(ListEmployeeActionTest.java:24)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:601)
> at junit.framework.TestCase.runTest(TestCase.java:168)
> at junit.framework.TestCase.runBare(TestCase.java:134)
> at junit.framework.TestResult$1.protect(TestResult.java:110)
> at junit.framework.TestResult.runProtected(TestResult.java:128)
> at junit.framework.TestResult.run(TestResult.java:113)
> at junit.framework.TestCase.run(TestCase.java:124)
> at junit.framework.TestSuite.runTest(TestSuite.java:243)
> at junit.framework.TestSuite.run(TestSuite.java:238)
> at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
> at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
> at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
> at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:601)
> at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
> at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
> at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
> at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
> at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira