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]
>
>