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

Reply via email to