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]