Apparently the junit tests in wicket 1.3.4 trigger a call to destroy twice. Since i am setting several fields to null this causes the second destroy to fail. As a quick fix i have put some nullchecks in the code. A new snapshot should be available shortly (see http://wicketstuff.org/teamcity/overview.html ). You can force maven to download this new snapshot by using the -U flag.
I will check why wicket is now doing a dual destroy and correct this if possible. Maurice On Mon, Jun 30, 2008 at 12:48 PM, Andrea Jahn <[EMAIL PROTECTED]> wrote: > Hi, > > I was using Wicket 1.3.3 and tester.destroy() worked fine. > > But I had to change to Wicket 1.3.4 (because of WICKET-1558) and now I get > the > following Exception when tester.destroy() is called: > > java.lang.NullPointerException > at > org.apache.wicket.security.swarm.actions.SwarmActionFactory.destroy(SwarmActionFactory.java:502) > at > org.apache.wicket.security.WaspWebApplication.onDestroy(WaspWebApplication.java:107) > at org.apache.wicket.Application.internalDestroy(Application.java:890) > at > org.apache.wicket.protocol.http.WebApplication.internalDestroy(WebApplication.java:448) > at > org.apache.wicket.protocol.http.MockWebApplication.destroy(MockWebApplication.java:674) > at test.front.LoginTest.tearDown(LoginTest.java:65) > at junit.framework.TestCase.runBare(TestCase.java:140) > 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 using Wasp/Swarm 1.3-SNAPSHOT. > > Thanks > Andrea > > > > 2008/6/20, Maurice Marrink <[EMAIL PROTECTED]>: >> >> In the teardown do tester.destroy() this will clean up everything. >> >> Maurice >> >> On Fri, Jun 20, 2008 at 10:16 AM, Andrea Jahn >> <[EMAIL PROTECTED]> wrote: >> > Hi, >> > Thank you very much for the Java solution :) ! >> > I have also corrected the place to return a new custom session :). >> > >> > Now the first test case runs without problems, >> > but in the second and third test case I get the following exception: >> > >> > java.lang.IllegalArgumentException: Another ActionFactory is already >> > registered with the following key: >> test.front.MyWicketTester$1:MyAppl-login >> > at >> > >> org.apache.wicket.security.actions.Actions.registerActionFactory(Actions.java:80) >> > at >> > >> org.apache.wicket.security.swarm.actions.SwarmActionFactory.<init>(SwarmActionFactory.java:86) >> > at >> > >> xxx.yyy.zzz.front.security.MyActionFactory.<init>(MyActionFactory.java:28) >> > at >> > >> xxx.yyy.zzz.front.MyApplication.setupActionFactory(MyApplication.java:177) >> > at >> > >> org.apache.wicket.security.swarm.SwarmWebApplication.init(SwarmWebApplication.java:96) >> > at xxx.yyy.zzz.front.MyApplication.init(MyApplication.java:38) >> > 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:27) >> > at test.front.LoginTest.setUp(LoginTest.java:50) >> > at junit.framework.TestCase.runBare(TestCase.java:132) >> > >> > >> > I tried to unregister the hive, but anyway the exception is thrown. >> > How can I remove the ActionFactory ? Or can I avoid, that it is >> registered >> > again ? >> > >> > Thanks again >> > Andrea >> > >> > >> > >> > public class MyWicketTester extends WicketTester >> > { >> > public MyWicketTester(final ApplicationContextMock appctx) >> > { >> > super(new MyApplication() { >> > @Override >> > protected void initSpring() { >> > >> > addComponentInstantiationListener(new >> SpringComponentInjector(this, >> > appctx)); >> > InjectorHolder.getInjector().inject(this); >> > }; >> > >> > @Override >> > public Session newSession(final Request request, Response response) >> { >> > ... >> > } >> > }); >> > } >> > } >> > >> > >> > public class LoginTest extends TestCase >> > { >> > private WicketTester tester; >> > private FormTester form; >> > private PersonService personServiceMock; >> > private LocationService locationServiceMock; >> > >> > @Before >> > public void setUp() throws Exception { >> > >> > personServiceMock = EasyMock.createStrictMock(PersonService.class); >> > locationServiceMock = >> EasyMock.createStrictMock(LocationService.class); >> > >> > ApplicationContextMock appctx = new ApplicationContextMock(); >> > appctx.putBean("personService", personServiceMock); >> > appctx.putBean("locationService", locationServiceMock); >> > >> > tester = new MyWicketTester(appctx); >> > } >> > >> > @After >> > public void tearDown() { >> > >> > // unregister factory >> > >> > >> HiveMind.unregisterHive(((MyApplication)tester.getApplication()).getHiveKey()); >> > } >> > >> > >> > @Test >> > public void testLoginPageRender(){ >> > ... >> > } >> > >> > @Test >> > public void testInvalidLogin(){ >> > ... >> > >> > } >> > >> > @Test >> > public void testValidLogin(){ >> > ... >> > >> > } >> > >> > >> > >> > >> > 2008/6/19, Maurice Marrink <[EMAIL PROTECTED]>: >> >> >> >> 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 >> >> > >> >> > >> >> >> > >> >> --------------------------------------------------------------------- >> 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]