Paul, thanks for the quick response. Now, down the checklist : 1. I am extending from the testng version of the class: package com.troymaxventures.zadachite.pagetestsupport;
import com.formos.tapestry.testify.core.TapestryTester; import com.formos.tapestry.testify.testng.TapestryTest; public abstract class AbstractZdTapTest extends TapestryTest { private static final TapestryTester SHARED_TESTER = new TapestryTester("foo", ZdTestAppModule.class); public AbstractZdTapTest() { super(SHARED_TESTER); } } 2. doSetUp() is indeed being called, I added a breakpoint and a println : @Override protected void doSetUp() { userRepo = EasyMock.createMock(UserRepository.class); System.out.println("The doSetUp() is called by TestNG"); } The doSetUp() is called by TestNG Tests run: 2, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 5.051 sec <<< FAILURE! 3. The testng config file : I run the test from Maven, this is the suite file that gets generated : <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="5" skipfailedinvocationCounts="false" verbose="0" name="Failed suite [Command line suite]" junit="false" annotations="JDK"> <test name="Command line test(failed)" junit="false" annotations="JDK"> <classes> <class name="com.troymaxventures.zadachite.pagetests.StupidPageTest"> <methods> <include name="processInjectAnnotation"/> <include name="testElementIsOnPage"/> <include name="tearDown"/> <include name="testStupidPageUnitTest"/> <include name="setUp"/> </methods> </class> </classes> </test> </suite> 4. I added an extra test where I explicitly use the pageTester to try to inject the dependencies into my page. When I specify a totally bogus package name ( so that Testify doesn't pick up the AppModule from my app), the test fails w/ an error that it can't find my page (understandable, as I had the bogus package name, so it can't find the page) when I render the page using the tester; however, when I try to inject the dependencies directly into the object instance, it fails that there is no instance of UserRepository . When I include the full package name (so that testify picks up the AppModule), the injectInto populates the service from the AppModule and not with the implementation that I provide in the test. When I use the tester.renderPage("stupid") and debug the page, I see nulls set on all the services (e.g. in my example, userRepo is null), and I also see non-null values in some mangled names in the class (e.g. something like _$nonTestUserRepo) ------------------------------------------------------------------------------- Test set: TestSuite ------------------------------------------------------------------------------- Tests run: 2, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 5.052 sec <<< FAILURE! testElementIsOnPage(com.troymaxventures.zadachite.pagetests.StupidPageTest) Time elapsed: 0.966 sec <<< FAILURE! java.lang.RuntimeException: Request was not handled: 'stupid' may not be a valid page name. at org.apache.tapestry5.test.PageTester.renderPage(PageTester.java:177) at com.troymaxventures.zadachite.pagetests.StupidPageTest.testElementIsOnPage(StupidPageTest.java:40) testStupidPageUnitTest(com.troymaxventures.zadachite.pagetests.StupidPageTest) Time elapsed: 0.01 sec <<< FAILURE! java.lang.RuntimeException: No service implements the interface com.troymaxventures.zadachite.services.UserRepository. at org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:575) at org.apache.tapestry5.ioc.internal.RegistryWrapper.getService(RegistryWrapper.java:58) at org.apache.tapestry5.test.PageTester.getService(PageTester.java:154) at com.formos.tapestry.testify.core.TapestryTester$FieldInjector.process(TapestryTester.java:125) at com.formos.tapestry.testify.core.TapestryTester.processField(TapestryTester.java:106) at com.formos.tapestry.testify.core.TapestryTester.processFieldsAnnotatedWith(TapestryTester.java:96) at com.formos.tapestry.testify.core.TapestryTester.injectInto(TapestryTester.java:74) at com.troymaxventures.zadachite.pagetests.StupidPageTest.testStupidPageUnitTest(StupidPageTest.java:53) The superclass w/ a bogus package name: import com.formos.tapestry.testify.core.TapestryTester; import com.formos.tapestry.testify.testng.TapestryTest; public abstract class AbstractZdTapTest extends TapestryTest { private static final TapestryTester SHARED_TESTER = new TapestryTester("foo", ZdTestAppModule.class); public AbstractZdTapTest() { super(SHARED_TESTER); } } import com.formos.tapestry.testify.core.ForComponents; import com.troymaxventures.zadachite.model.EmailAddress; import com.troymaxventures.zadachite.model.UserRegistration; import com.troymaxventures.zadachite.model.ZdUser; import com.troymaxventures.zadachite.pages.Stupid; import com.troymaxventures.zadachite.pagetestsupport.AbstractZdTapTest; import com.troymaxventures.zadachite.services.UserRepository; import org.apache.tapestry5.dom.Document; import org.easymock.EasyMock; import org.testng.Assert; import org.testng.annotations.Test; import static org.easymock.EasyMock.*; /** * * @author polrtex */ public class StupidPageTest extends AbstractZdTapTest { @ForComponents UserRepository userRepo; @Override protected void doSetUp() { userRepo = EasyMock.createMock(UserRepository.class); System.out.println("The doSetUp() is called by TestNG"); } @Test public void testElementIsOnPage() throws Exception { expect(userRepo.userRegistered((EmailAddress)anyObject())).andStubReturn(Boolean.FALSE); ZdUser testUser = new ZdUser(new EmailAddress("f...@bar.com")); expect(userRepo.registerUser(isA(UserRegistration.class))).andStubReturn(testUser); replay(userRepo); Document page = tester.renderPage("stupid"); Assert.assertTrue(page.toString().contains("I should be empty")); } @Test public void testStupidPageUnitTest() throws Exception { expect(userRepo.userRegistered((EmailAddress)anyObject())).andStubReturn(Boolean.FALSE); ZdUser testUser = new ZdUser(new EmailAddress("f...@bar.com")); expect(userRepo.registerUser(isA(UserRegistration.class))).andStubReturn(testUser); replay(userRepo); Stupid s = new Stupid(); // when I have a bogus package name, this fails w/ a message that there are no UserRepository-ies to inject tester.injectInto(s); s.setupRender(); } } Paul Field-4 wrote: > > > The next thing is probably to check that the various setup methods are > being called. Can you put a print statement into doSetUp() and check it's > actually being called? This will let us see whether the setup isn't being > called, or the @ForComponents processing isn't working properly. I suspect > the doSetUp()isn't being called and that's going to be a TestNG thing: it > should be calling TapestryTest#setUp() method... Can you check the TestNG > output reports - I seem to remember that one of them outputs the sequence > of setup methods and tests? If you're still stuck can you also send the > testng configuration (xml) file? > > Let me know what you find. > > - Paul > > > > > akochnev <akoch...@gmail.com> wrote on 29/01/2010 11:24:01: > >> >> I'm running into trouble with using services declared inside of a > Testify >> TestNG test case with @ForComponents into my pages - when I ask the > tester >> to render a page, the services that were supposed to be injected, are > null. >> Any tips on what I'm doing wrong ? >> >> >> Here is the sample code: >> >> public class StupidPageTest extends AbstractZdTapTest { >> @ForComponents >> private UserRepository userRepo; >> >> >> @Override >> protected void doSetUp() { >> userRepo = EasyMock.createMock(UserRepository.class); >> } >> >> >> @Test >> public void testElementIsOnPage() throws Exception { >> >> expect(userRepo.userRegistered((EmailAddress)anyObject())). >> andStubReturn(Boolean.FALSE); >> ZdUser testUser = new ZdUser(new EmailAddress("f...@bar.com"));; >> >> expect(userRepo.registerUser(isA(UserRegistration.class))). >> andStubReturn(testUser); >> replay(userRepo); >> Document page = tester.renderPage("stupid"); >> System.out.println("Rendered page: " + page.toString()); >> >> } >> } >> >> public abstract class AbstractZdTapTest extends TapestryTest { >> private static final TapestryTester SHARED_TESTER = new >> TapestryTester("com.troymaxventures.zadachite", >> ZdTestAppModule.class,AppModule.class); >> >> public AbstractZdTapTest() { >> super(SHARED_TESTER); >> } >> } >> >> public abstract class AbstractZdTapTest extends TapestryTest { >> private static final TapestryTester SHARED_TESTER = new >> TapestryTester("com.troymaxventures.zadachite", ZdTestAppModule.class); >> >> public AbstractZdTapTest() { >> super(SHARED_TESTER); >> } >> } >> >> public class ZdTestAppModule { >> >> /** >> * Ensure that there are valid HTTP request/response objects in the >> test, otherwise the ACEGI integration tends to blow up. >> */ >> public static void >> contributeRequestHandler(OrderedConfiguration<RequestFilter> config, > final >> RequestGlobals requestGlobals) { >> RequestFilter filter = new RequestFilter() { >> >> @Override >> public boolean service(Request request, Response response, >> RequestHandler handler) throws IOException { >> >> requestGlobals.storeServletRequestResponse(EasyMock. >> createMock(HttpServletRequest.class), >> EasyMock.createMock(HttpServletResponse.class)); >> return handler.service(request, response); >> } >> }; >> config.add("EnsureNonNullHttpRequestAndResponse", filter, >> "before:*"); >> } >> } >> >> public class Stupid { >> @Inject >> private UserRepository userRepo; >> void setupRender() throws StorageException { >> // the userRepo is null here during the test >> userRepo.getUser(new EmailAddress("f...@bar.com")); >> } >> } >> >> >> -- >> View this message in context: http://old.nabble.com/TestNG--- >> Injecting-Testify-services-into-pages-tp27370621p27370621.html >> Sent from the Tapestry - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> > > > > --- > > This e-mail may contain confidential and/or privileged information. If you > are not the intended recipient (or have received this e-mail in error) > please notify the sender immediately and delete this e-mail. Any > unauthorized copying, disclosure or distribution of the material in this > e-mail is strictly forbidden. > > Please refer to http://www.db.com/en/content/eu_disclosures.htm for > additional EU corporate and regulatory disclosures. > -- View this message in context: http://old.nabble.com/TestNG---Injecting-Testify-services-into-pages-tp27370621p27371994.html Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org