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#4027706

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4027706
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to