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

Reply via email to