I was going to make a Jira entry about it, but figured it is best to post in the forums
first. Especially when doing a little research, it looks like this might be happening at
the EL apis level.
Here is what is happening
SUMMARY: Exception thrown in FacesRequest in SeamTest masks the root cause of the
Exception
ENVIRONMENT: Windows XP. build and running of tests through Maven2.
DETAILS:
In running a SeamTest that throws an exception in a FacesRequest masks the real cause of
the exception, which makes it difficult to find the root cause in the stack trace.
In the following example, I ran a FacesRequest that calls a method in an
"Action" class. It throws a NPE. And if I test calling the method in the class
directly I also get the NPE, but the stacktrace shows me exactly where it occurs. In the
NPE thrown by the FacesRequest, it only shows the request in the stacktrace.
(Note, my requests are not directly created inside the SeamTest class, but in a class that
creates different requests that I can reuse in multiple SeamTest classes.
Here is the FacesRequest code
| test.new FacesRequest() {
| @Override
| protected void updateModelValues() throws Exception
| {
| //Set the resource selected
|
| }
|
| @Override
| protected void invokeApplication() throws Exception
| {
| //Invoke to get the Navigation Map
| invokeMethod("#{navigationAction.getNavigationMap()}");
| }
|
| @Override
| protected void renderResponse() throws Exception
| {
|
| }
| }.run();
|
this is the exception stacktrace I see when running the test (Maven is used)
| Running myapp.ui.test.DataSourceActionTest
| java.lang.NullPointerException
| at org.jboss.seam.mock.SeamTest$Request.run(SeamTest.java:407)
| at myapp.util.NavigationRequests.getNavigationMap(NavigationRequests.java:21)
| at
myapp.ui.test.DataSourceActionTest.testLeftNavigation(DataSourceActionTest.java:34)
| 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:585)
| at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
| at org.testng.internal.Invoker.invokeMethod(Invoker.java:411)
| at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:785)
| at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
| at org.testng.TestRunner.privateRun(TestRunner.java:693)
| at org.testng.TestRunner.run(TestRunner.java:574)
| at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
| at org.testng.SuiteRunner.run(SuiteRunner.java:145)
| at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:901)
| at org.testng.TestNG.runSuitesLocally(TestNG.java:863)
| at
org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeTestNG(TestNGDirectoryTestSuite.java:194)
| at
org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:131)
| at org.apache.maven.surefire.Surefire.run(Surefire.java:129)
| 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:585)
| at
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:288)
| at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:816)
|
If I call the action method directly, I get the correct stacktrace I would expect to find.
(Another Note, in stepping through the code in both examples here, they both threw the
exception from the same line of code)
| NavigationAction navAction = new NavigationAction();
| navAction.getNavigationMap();
| Running myapp.ui.test.DataSourceActionTest
| java.lang.NullPointerException
| at myapp.InventoryManager.getResourcesWithType(InventoryManager.java:485)
| at
myapp.impl.inventory.InventoryManager.getResourcesWithType(InventoryManager.java:483)
| at
myapp.impl.inventory.InventoryManager.getResourcesWithType(InventoryManager.java:471)
| at
myapp.pc.PluginContainerResourceManager.getResources(PluginContainerResourceManager.j
| ava:104)
| at
myapp.ResourceManagerBean.getResourceListByCategory(ResourceManagerBean.java:56)
| at myapp.ui.NavigationAction.getNavigationMap(NavigationAction.java:76)
| at
myapp.ui.test.DataSourceActionTest.getNavigationList(DataSourceActionTest.java:90)
| at
myapp.ui.test.DataSourceActionTest.testLeftNavigation(DataSourceActionTest.java:34)
| 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:585)
| at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
| at org.testng.internal.Invoker.invokeMethod(Invoker.java:411)
| at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:785)
| at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
| at org.testng.TestRunner.privateRun(TestRunner.java:693)
| at org.testng.TestRunner.run(TestRunner.java:574)
| at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
| at org.testng.SuiteRunner.run(SuiteRunner.java:145)
| at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:901)
| at org.testng.TestNG.runSuitesLocally(TestNG.java:863)
| at
org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeTestNG(TestNGDirectoryTestSuite.java:194)
| at
org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:131)
| at org.apache.maven.surefire.Surefire.run(Surefire.java:129)
| 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:585)
| at
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:288)
| at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:816)
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4027706#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...