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