My initial problem was, that I have different application contexts in the
test environment
and in the Web application and therefore different calls of
addComponentInstantiationListener.

In my test environment I have a ApplicationContextMock, which I have to add
as second parameter:
addComponentInstantiationListener(*new* SpringComponentInjector(*this*,
appctx));

In the Web application the application context for the Spring beans is
configured in
application-context.xml.

So when I call MyApplication.init() from the test environment I get the
exception
"No WebApplicationContext found: noContextLoaderListener registered?",
when addComponentInstantiationListener(new SpringComponentInjector(this)) is
called.

Perhaps is there another possibility to add the appctx in the test
environment
or another place to call addComponentInstantiationListener(new
SpringComponentInjector(this))
in the Web application ??

Thanks
Andrea


2008/6/19, Maurice Marrink <[EMAIL PROTECTED]>:
>
> In the above code you are showing 2 different codes for MyApplication,
> both override the init method. one of them calls super.init the other
> does not. your init should look like this:
> protected void init() {
>       super.init();
>       addComponentInstantiationListener(new SpringComponentInjector(this));
>       InjectorHolder.getInjector().inject(this);
>       // optional other stuff by you
>     };
> Also you are overriding the wrong place to return a new custom session.
> you are overriding WicketTester.getWicketSession() but you should be
> overriding MyApplication.newSession(Request, Response)
>
> Hope this helps.
>
> Maurice
>
> On Thu, Jun 19, 2008 at 8:43 AM, Andrea Jahn <[EMAIL PROTECTED]>
> wrote:
> > Hi,
> > Sorry, if this is a stupid Java question:
> >
> > But how can I call SwarmWebApplication.init() without calling
> > MyApplication.init() ?
> >
> > Thanks
> > Andrea
> >
> > public class MyWicketTester extends WicketTester
> > {
> >  public MyWicketTester(final ApplicationContextMock appctx)
> >  {
> >    super(new MyApplication() {
> >      @Override
> >      protected void init() {
> >
> >        super.init();  <--- MyApplication.init()
> >      };
> >    });
> >  }
> > }
> >
> >
> > public class MyApplication extends SwarmWebApplication
> > {
> >  protected void init() {
> >    super.init();
> >  }
> > }
> >
> >
> >
> >
> >
> > 2008/6/18, Maurice Marrink <[EMAIL PROTECTED]>:
> >>
> >> You need to call super.init(). that will fix your swarm problems. as
> >> for spring i think you need:
> >>
> >> addComponentInstantiationListener(new SpringComponentInjector(this));
> >> InjectorHolder.getInjector().inject(this);
> >>
> >> Maurice
> >>
> >>
> >> On Wed, Jun 18, 2008 at 10:23 AM, Andrea Jahn
> >> <[EMAIL PROTECTED]> wrote:
> >> > Hi,
> >> >
> >> > after the integration of the Wasp/Swarm framework (only basic
> >> functionality
> >> > at the moment) I have to adapt the wicket JUnit tests.
> >> >
> >> > But I have the following problems:
> >> >
> >> >
> >> > public class LoginTest
> >> > {
> >> >  private WicketTester tester;
> >> >  private FormTester form;
> >> >  private PersonService personServiceMock;
> >> >  private final int personId = 2000000; //same id is used in whole test
> >> >
> >> >  @Before
> >> >  public void setUp() throws Exception {
> >> >    tester = new MyWicketTester();
> <--------------------------------
> >> >
> >> >    personServiceMock = EasyMock.createStrictMock(PersonService.class);
> >> >
> >> >    ApplicationContextMock appctx = new ApplicationContextMock();
> >> >    appctx.putBean("personService", personServiceMock);
> >> >
> >> >    // setup WicketTester and injection for @SpringBean
> >> >    tester.getApplication().addComponentInstantiationListener
> >> >  (new SpringComponentInjector(tester.getApplication(), appctx));
> >> >  }
> >> >
> >> >  @Test
> >> >  public void testLoginPageRender(){
> >> >    tester.startPage(Login.class);
> >> >    tester.assertRenderedPage(Login.class);
> >> >
> >> >    tester.assertNoErrorMessage();
> >> >
> >> >    form = tester.newFormTester("loginForm");
> >> >    assertNotNull(form);
> >> >    tester.assertComponent("loginForm:userName", TextField.class);
> >> >    tester.assertComponent("loginForm:password", TextField.class);
> >> >  }
> >> >
> >> > ...
> >> > }
> >> >
> >> >
> >> > public class MyWicketTester extends WicketTester
> >> > {
> >> >  public MyWicketTester()
> >> >  {
> >> >    super(new MyApplication());   <----------------
> >> >  }
> >> >
> >> >  @SuppressWarnings("serial")
> >> >  @Override
> >> >
> >> >  public WebSession getWicketSession() {
> >> >    MySession session =
> >> >  new MySession((MyApplication)getApplication(), getWicketRequest()) {
> >> >      public boolean isPersonLoggedIn() {
> >> >        return true;
> >> >      }
> >> >    };
> >> >
> >> >    session.setPerson(HibernateTestHelper.createTestPerson( new
> >> Integer(123)
> >> > ));
> >> >    return session;
> >> >  }
> >> > }
> >> >
> >> >
> >> > public class MyApplication extends SwarmWebApplication
> >> > {
> >> >  protected void init() {
> >> >    super.init();
> >> >
> >> >    addComponentInstantiationListener(new
> SpringComponentInjector(this));
> >> > <-----------------------
> >> >  }
> >> >
> >> > ...
> >> > }
> >> >
> >> > java.lang.IllegalStateException: No WebApplicationContext found: no
> >> > ContextLoaderListener registered?
> >> >  at
> >> >
> >>
> org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:86)
> >> >  at
> >> >
> >>
> org.apache.wicket.spring.injection.annot.SpringComponentInjector.<init>(SpringComponentInjector.java:74)
> >> >  at xxx.yyy.zzz.front.MyApplication.init(MyApplication.java:37)
> >> >  at
> >> org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:526)
> >> >  at
> >> >
> >>
> org.apache.wicket.protocol.http.MockWebApplication.<init>(MockWebApplication.java:151)
> >> >  at
> >> >
> >>
> org.apache.wicket.util.tester.BaseWicketTester.<init>(BaseWicketTester.java:205)
> >> >  at
> >> org.apache.wicket.util.tester.WicketTester.<init>(WicketTester.java:308)
> >> >  at
> >> org.apache.wicket.util.tester.WicketTester.<init>(WicketTester.java:291)
> >> >  at test.front.MyWicketTester.<init>(MyWicketTester.java:18)
> >> >  at test.front.LoginTest.setUp(LoginTest.java:34)
> >> >  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >> >  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> >> >  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> >> >  at java.lang.reflect.Method.invoke(Unknown Source)
> >> >  at
> >> >
> org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:122)
> >> >  at
> >> >
> >>
> org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:86)
> >> >  at
> org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
> >> >  at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
> >> >  at
> >> >
> >>
> org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
> >> >  at
> >> >
> >>
> org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
> >> >  at
> >> >
> >>
> org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
> >> >  at
> >> >
> >>
> org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
> >> >  at
> >> org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
> >> >  at
> >> >
> >>
> org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
> >> >  at
> >> >
> >>
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
> >> >  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)
> >> >
> >> >
> >> >
> >> > I tried to override the init() method as described in the spring wiki:
> >> >
> >> >
> >>
> http://cwiki.apache.org/WICKET/spring.html#Spring-UnitTestingtheProxyApproach
> >> >
> >> >
> >> >
> >> > public class MyWicketTester extends WicketTester
> >> > {
> >> >  public MyWicketTester(final ApplicationContextMock appctx)
> >> >  {
> >> >    super(new MyApplication() {
> >> >      @Override
> >> >      protected void init() {
> >> >                addComponentInstantiationListener(new
> >> > SpringComponentInjector(this, appctx));
> >> >      };
> >> >    });
> >> >  }
> >> >
> >> >  @SuppressWarnings("serial")
> >> >  @Override
> >> >  public WebSession getWicketSession() {
> >> >    MySession session = new MySession((MyApplication)getApplication(),
> >> > getWicketRequest()) {
> >> >      public boolean isPersonLoggedIn() {
> >> >        return true;
> >> >      }
> >> >    };
> >> >
> >> >    session.setPerson(HibernateTestHelper.createTestPerson( new
> >> Integer(123)
> >> > ));
> >> >    return session;
> >> >  }
> >> > }
> >> >
> >> >
> >> > But now the init() method of SwarmWebApplication, where the
> >> ActionFactory,
> >> > the Hive and the StrategyFactory are set up,
> >> > is not called and the following error is in init() of WaspSession.
> >> >
> >> >
> >> > public class MySession extends WaspSession
> >> > {
> >> >  // logged in user
> >> >  private Person person;
> >> >
> >> >  public MySession(WaspApplication application, Request request){
> >> >    super(application, request);   <---------------------------------
> >> >  }
> >> >
> >> >  public Person getPerson() {
> >> >    return person;
> >> >  }
> >> >
> >> >  public void setPerson(Person person) {
> >> >    this.person = person;
> >> >  }
> >> > ...
> >> > }
> >> >
> >> >
> >> > public class WaspSession extends WebSession
> >> > {
> >> > ...
> >> >  public WaspSession(WaspApplication application, Request request)
> >> >  {
> >> >  super(request);
> >> >  securityStrategy = application.getStrategyFactory().newStrategy();
> >> > <-----------------------
> >> >  }
> >> > ...
> >> > }
> >> >
> >> >
> >> > java.lang.NullPointerException
> >> >  at org.apache.wicket.security.WaspSession.<init>(WaspSession.java:48)
> >> >  at xxx.yyy.zzz.front.MySession.<init>(MySession.java:36)
> >> >  at xxx.yyy.zzz.front.MyApplication.newSession(MyApplication.java:67)
> >> >  at org.apache.wicket.Session.findOrCreate(Session.java:228)
> >> >  at org.apache.wicket.Session.findOrCreate(Session.java:211)
> >> >  at
> >> >
> >>
> org.apache.wicket.protocol.http.MockWebApplication.createRequestCycle(MockWebApplication.java:518)
> >> >  at
> >> >
> >>
> org.apache.wicket.protocol.http.MockWebApplication.<init>(MockWebApplication.java:199)
> >> >  at
> >> >
> >>
> org.apache.wicket.util.tester.BaseWicketTester.<init>(BaseWicketTester.java:205)
> >> >  at
> >> org.apache.wicket.util.tester.WicketTester.<init>(WicketTester.java:308)
> >> >  at
> >> org.apache.wicket.util.tester.WicketTester.<init>(WicketTester.java:291)
> >> >  at test.front.MyWicketTester.<init>(MyWicketTester.java:22)
> >> >  at test.front.LoginTest.setUp(LoginTest.java:47)
> >> >  at junit.framework.TestCase.runBare(TestCase.java:132)
> >> >  at junit.framework.TestResult$1.protect(TestResult.java:110)
> >> >  at junit.framework.TestResult.runProtected(TestResult.java:128)
> >> >  at junit.framework.TestResult.run(TestResult.java:113)
> >> >  at junit.framework.TestCase.run(TestCase.java:124)
> >> >  at junit.framework.TestSuite.runTest(TestSuite.java:232)
> >> >  at junit.framework.TestSuite.run(TestSuite.java:227)
> >> >  at
> >> >
> >>
> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
> >> >  at
> >> >
> >>
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
> >> >  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)
> >> >
> >> >
> >> >
> >> > I'm not sure, if I'm on the right track here (trying to remove the
> >> > Wasp/Swarm dependencies from the test).
> >> >
> >> > Is there a possibility to call addComponentInstantiationListener
> outside
> >> of
> >> > init() in MyApplication,
> >> > so that I don't have to override the init() method in MyWicketTester ?
> >> >
> >> > Thanks
> >> > Andrea
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> 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