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