I generally create a mock for the IRequestCycle (using EasyMock), so havent run
into 
this kind of problem.

>From what I can guess from the code, you try to initialize the Tapestry system
and have it along during the unit tests.

Are there any real benefits to this, instead of using mocks?

But anyway, you could extend the RequestCycle class, override its
getPage method and have Creator construct a suitable page instance,
couldnt you?

>From Matt Raible <[EMAIL PROTECTED]>:

> I'm in the midst of upgrading Equinox (http://equinox.dev.java.net)
> from Tapestry 3.3 to 4.0.  With the 3.3 version, I had a
> tapestry-mock.jar that I created from Tapestry's CVS, as well as an
> AbstractInstantiator class that I found on Howard's site.
> 
> For the most part, the new Creator class is sufficient for testing my
> pages.  However, I haven't found a way to add pages to Tapestry so
> when I call cycle.getPage('name'), things don't fail.
> 
> Here's my listener method:
> 
>     public void save(IRequestCycle cycle) {
>         if (log.isDebugEnabled()) {
>             log.debug("entered 'save' method");
>         }
> 
>         if (getValidationDelegate().getHasErrors()) {
>             return;
>         }
> 
>         getUserManager().saveUser(getUser());
> 
>         UserList nextPage = (UserList) cycle.getPage("users");
>         nextPage.setMessage(getMessages().format("user.saved",
> getUser().getFullName()));
>         throw new PageRedirectException(nextPage);
>     }
> 
> Here's my test - first of all, my UserFormTest.java extends
> BasePageTestCase.java:
> 
> BasePageTestCase.java:
> 
> public class BasePageTestCase extends
> AbstractDependencyInjectionSpringContextTests {
>     protected final Log log = LogFactory.getLog(getClass());
> 
>     protected String[] getConfigLocations() {
>         return new String[] {"/WEB-INF/applicationContext*.xml"};
>     }
> 
>     protected IPage getPage(Class clazz) {
>         return getPage(clazz, null);
>     }
> 
>     protected IPage getPage(Class clazz, Map properties) {
>         Creator creator = new Creator();
>         if (properties == null) {
>             properties = new HashMap();
>         }
> 
>         return (IPage) creator.newInstance(clazz, properties);
>     }
> }
> 
> public class UserFormTest extends BasePageTestCase {
>     private UserForm page;
>     private Long userId;
>     private UserManager userManager;
> 
>     public void setUserManager(UserManager userManager) {
>         this.userManager = userManager;
>     }
> 
>     protected void onSetUp() throws Exception {
>         Map map = new HashMap();
>         map.put("userManager", userManager);
>         page = (UserForm) getPage(UserForm.class, map);
> 
>         // create a new user
>         User user = new User();
>         user.setFirstName("Jack");
>         user.setLastName("Raible");
> 
>         // persist to database
>         userManager.saveUser(user);
>         userId = user.getId();
>     }
> 
>     protected void onTearDown() throws Exception {
>         page = null;
>     }
> 
>     public void testSave() throws Exception {
>         RequestCycle cycle = new RequestCycle();
>         cycle.setServiceParameters(new Object[] {userId});
> 
>         page.edit(cycle);
>         assertNotNull(page.getUser());
>         try {
>             page.save(cycle);
>             fail("Redirect didn't occur");
>         } catch (PageRedirectException pe) {
>             assertNotNull("redirect failed", pe);
>         }
>     }
> 
> }
> 
> There error I'm getting is below.  I'm able to test just about
> everything - it's just the loading of pages that's failing (so far).
> 
> java.lang.NullPointerException
>       at 
> org.apache.tapestry.engine.RequestCycle.loadPage(RequestCycle.java:290)
>       at 
> org.apache.tapestry.engine.RequestCycle.getPage(RequestCycle.java:251)
>       at org.appfuse.web.UserForm.save(UserForm.java:70)
>       at org.appfuse.web.UserFormTest.testSave(UserFormTest.java:55)
>       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:324)
>       at junit.framework.TestCase.runTest(TestCase.java:154)
>       at junit.framework.TestCase.runBare(TestCase.java:127)
>       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:118)
>       at
>
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
>       at
>
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
>       at
>
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> 
> Thanks,
> 
> Matt
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 


-- 



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

Reply via email to