Sorry never done much with spring, but according to this
http://cwiki.apache.org/WICKET/spring.html#Spring-UnitTestingtheProxyApproach
you were on the right track.
So if you do your spring config in a protected method which is called
by your application.init. you can override that method in your junit
tests to use the mock springcontext.

Maurice

On Thu, Jun 19, 2008 at 11:44 AM, Andrea Jahn
<[EMAIL PROTECTED]> wrote:
> 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]
>>
>>
>

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

Reply via email to