Hi,

You may want to extend BaseControllerTestCase rather than MockObjectTestCase
as the BaseFormController requires a Spring application context to be
present when it initialises. The piece of code that is failing is when the
BaseFormController tries to obtain the default date format from the resource
bundle for the locale in which you are running.

Mike.

On 2/24/07, porvak <[EMAIL PROTECTED]> wrote:


I'm using AppFuse 2.0 M3 with SpringMVC and was trying to write a unit
test
for my controller.  When I run my test I get the following error:

java.lang.IllegalStateException: ApplicationObjectSupport instance
[EMAIL PROTECTED] does not run in
an
ApplicationContext
       at

org.springframework.context.support.ApplicationObjectSupport.getMessageSourceAccessor
(ApplicationObjectSupport.java:137)
       at
org.appfuse.webapp.controller.BaseFormController.getText(
BaseFormController.java:81)
       at
org.appfuse.webapp.controller.BaseFormController.initBinder(
BaseFormController.java:153)
       at
org.springframework.web.servlet.mvc.BaseCommandController.createBinder(
BaseCommandController.java:416)
       at
org.springframework.web.servlet.mvc.BaseCommandController.bindAndValidate(
BaseCommandController.java:366)
       at

org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal
(AbstractFormController.java:248)
       at
org.springframework.web.servlet.mvc.AbstractController.handleRequest(
AbstractController.java:153)
       at
org.myapp.app.controller.MemberSearchControllerTest.testNoResultSearch(
MemberSearchControllerTest.java:58)
       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 junit.framework.TestCase.runTest(TestCase.java:164)
       at org.jmock.core.VerifyingTestCase.runBare(VerifyingTestCase.java
:39)
       at junit.framework.TestResult$1.protect(TestResult.java:106)
       at junit.framework.TestResult.runProtected(TestResult.java:124)
       at junit.framework.TestResult.run(TestResult.java:109)
       at junit.framework.TestCase.run(TestCase.java:120)
       at junit.framework.TestSuite.runTest(TestSuite.java:230)
       at junit.framework.TestSuite.run(TestSuite.java:225)
       at
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(
JUnit3TestReference.java:128)
       at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java
:38)
       at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
RemoteTestRunner.java:460)
       at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
RemoteTestRunner.java:673)
       at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
RemoteTestRunner.java:386)
       at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
RemoteTestRunner.java:196)

Here is the code for my unit test

package org.myapp.app.controller;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jmock.Mock;
import org.jmock.MockObjectTestCase;
import org.myapp.app.model.MemberList;
import org.myapp.app.service.MemberManager;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.ModelAndView;

public class MemberSearchControllerTest extends MockObjectTestCase {

       private MemberSearchController c;
       private Mock mgr;
       private MockHttpServletRequest request;
       private MockHttpServletResponse response;

       @Override
       protected void setUp() throws Exception {
               super.setUp();
               mgr = new Mock(MemberManager.class);
               c = new MemberSearchController();
               c.setMemberManager((MemberManager)mgr.proxy());
               request = new MockHttpServletRequest();
               response = new MockHttpServletResponse();
       }

       @Override
       protected void tearDown() throws Exception {
               c = null;
       }

       public void testNoResultSearch() throws Exception{

       request.setMethod("POST");
       List<MemberList> noResult = new ArrayList<MemberList>();

       mgr.expects(once()).method("search").will(returnValue(noResult));
       ModelAndView mv = c.handleRequest(request, response);

       List<?> results = (List<?>) mv.getModel().get("MEMBERLIST");

       assertNotNull(results);
       assertEquals(0, results.size());
       }
}


Here is my controller code:

/**
*
*/
package org.myapp.app.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.appfuse.webapp.controller.BaseFormController;
import org.myapp.app.model.MemberList;
import org.myapp.app.model.MemberSearchCriteria;
import org.myapp.app.service.MemberManager;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

public class MemberSearchController extends BaseFormController {

       private MemberManager memberManager = null;

       public MemberSearchController() {
               setCommandClass(MemberSearchCriteria.class);
               setCommandName("member");
       }

       protected Object formBackingObject(HttpServletRequest request)
                       throws Exception {
               return new MemberSearchCriteria();
       }

       @Override
       public ModelAndView onSubmit(HttpServletRequest request,
                       HttpServletResponse response, Object command,
BindException errors)
                       throws Exception {
               MemberSearchCriteria criteria = (MemberSearchCriteria)
command;
               List<MemberList> results = memberManager.search(criteria);

               return new ModelAndView("memberList", "MEMBERLIST",
results);
       }

       public void setMemberManager(MemberManager mgr) {
               this.memberManager = mgr;
       }

}



However when I have my controller class extend SimpleFormController
instead
of BaseFormController my unit test executes without a problem.  If I use
BaseFormController does this mean that I can not unit test my class and
should just pursue integration tests? or am I doing something wrong?

Thanks!
--
View this message in context:
http://www.nabble.com/Unit-Test-SpringMVC-Controller-tf3282306s2369.html#a9130112
Sent from the AppFuse - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Reply via email to