It is hard to say, but it could be as simple as DefaultResultMapBuilder not finding the files where it expects them. Set some breakpoints there, and I am sure you will find what is missing.
musachy On Mon, Mar 9, 2009 at 3:41 PM, dusty <dustin_pea...@yahoo.com> wrote: > > Hi All (err Musachy), > > I have the classes below that I use for unit testing. They are a > spin-off/update of the Depressed Programmers unit test class. I like them > because they can test the Struts config along with the actions themselves + > interceptor execution. Things go well when you have an @Result annotation > for your action, but when you rely on Convention finding your view jsp by > "convention" my test doesn't seem to think the result is registered in the > Struts config. > > So here is the Controller code (w/o @Result): > > @Namespace("/customers") > public class CustomerController extends RootAction implements Preparable { > private CustomerManager customerManager; > private Long id; > private Customer customer; > private List<Customer> customers; > > �...@action("index") > public String index(){ > customers = customerManager.getAll(); > return "index"; > } > > > Here is the base class for unit tests that gets Struts setup. An > ActionProxy is created and there is a setting telling it to executeResult or > not. If this is false then we are good, but then you are not testing the > config. When its set to true it can't find the result when no @Result > annotation is present: > > @ContextConfiguration(loader=StrutsContextLoader.class , locations = > {"classpath:/applicationContext-resources.xml","classpath:/applicationContext-service.xml","classpath:/applicationContext-CrowdClient.xml","classpath:/applicationContext.xml","/WEB-INF/security.xml" > }) > @TransactionConfiguration(transactionManager = > "transactionManager",defaultRollback = true) > @Transactional > public class BaseStrutsTestCaseSpring extends > AbstractTransactionalJUnit4SpringContextTests{ > protected MockHttpServletRequest request; > protected MockHttpServletResponse response; > private Dispatcher dispatcher; > protected ActionProxy proxy; > WebApplicationContext context; > > �...@before > public void onSetUpBeforeTransaction() throws Exception { > request = new MockHttpServletRequest(); > response = new MockHttpServletResponse(); > context = (WebApplicationContext)applicationContext; > HashMap params = new HashMap(); > params.put("actionPackages", "com.jmh.employeedb.webapp.action"); > dispatcher = new Dispatcher(context.getServletContext(), params); > dispatcher.init(); > Dispatcher.setInstance(dispatcher); > > } > > protected <T> T createAction(String namespace, String name) > throws Exception { > Map extraContext = dispatcher.createContextMap(request, response, > null, context.getServletContext()); > proxy = > dispatcher.getContainer().getInstance(ActionProxyFactory.class). > createActionProxy( > namespace, name, null,extraContext, true, false); > proxy.getInvocation().getInvocationContext(). > setSession(new HashMap()); > proxy.setExecuteResult(true); > ServletActionContext.setContext( > proxy.getInvocation().getInvocationContext()); > ServletActionContext.setServletContext(context.getServletContext()); > return (T) proxy.getAction(); > } > > Here is the moving part of CustomContextLoader class referenced in the > annotation: > > public class StrutsContextLoader extends AbstractContextLoader { > > public ApplicationContext loadContext(String... locations) throws > Exception { > MockServletContext servletContext = new > MockServletContext("/src/main/webapp",new FileSystemResourceLoader()); > servletContext.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM, > arrayToString(locations, ",")); > return (new > ContextLoader()).initWebApplicationContext(servletContext); > } > > > Finally, here is a test implementation: > > public class CustomerControllerTest extends BaseStrutsTestCaseSpring { > > �...@test > public void getCustomerIndex() throws Exception{ > CustomerController customerController = > createAction("/customers","index"); > String result = proxy.execute(); > Assert.assertEquals("index", result); > Assert.assertNotNull(customerController.getCustomers()); > Assert.assertTrue(customerController.getCustomers().size() > 0); > } > > If I add an @Result annotation to the @Action annotation for index() then > its all good, but then I don't get cool implicit results by convention. I > assume it has something to do with how I am initializing the Struts > config/dispatcher but I can't be sure. > > Any ideas? > -- > View this message in context: > http://www.nabble.com/Convention-Plugin-and-Unit-Tests-tp22417780p22417780.html > Sent from the Struts - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > > -- "Hey you! Would you help me to carry the stone?" Pink Floyd --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org