You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Martin Grigorov <mg...@apache.org> on 2011/06/05 16:36:26 UTC

BaseWicketTester overrides the setup in MyApp#init()

Hi,

I had some troubles recently to setup custom ISessionStore and
IPageManager for some tests.
The problem is that BaseWicketTester overrides anything already setup
in MyApp#init() with the inmemory/mock impls.
I suggest to move all these inmemory/mock impls in
MockApplication#init() and all tests that use "new WicketTester()"
will use those. All user's tests will have to override UserApp#init()
for the tests if they prefer any inmemory/mock impl, otherwise they
will use the default impl provided by Wicket (depends on DEPLOYMENT or
DEVELOPMENT mode). This way they will be more close to the real
environment and can setup inmemory impl *only* if they decide so.

The only exception are IPageRendererProvider and IRequestCycleProvider
which has to be special for WicketTester.

WDYT ?

-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

Re: BaseWicketTester overrides the setup in MyApp#init()

Posted by Igor Vaynberg <ig...@gmail.com>.
sounds like both of these are internal tests - not something that is
valid for user-land. like i said, factor out those things that replace
the providers into an overridable method - and in those tests override
it to do nothing...

-igor

On Sun, Jun 5, 2011 at 9:23 AM, Martin Grigorov <mg...@apache.org> wrote:
> On Sun, Jun 5, 2011 at 7:14 PM, Igor Vaynberg <ig...@gmail.com> wrote:
>> On Sun, Jun 5, 2011 at 9:01 AM, Martin Grigorov <mg...@apache.org> wrote:
>>> Currently MockApplication overrides #internalInit() (why not #init()
>>> ?!) and setups almost similar inmemory/mock impls like the ones
>>> BaseWicketTester overrides later.
>>
>> it does, but it is a very common scenario when components under test
>> need to access something in application or session which is why we
>> tell the users to use their own application class with tester.
>>
>>> I find it confusing that in my app I have to use #init() {
>>> setXYZProvider(...)} but in tests this provider is overridden silently
>>> by something else.
>>
>> which provider is causing you grief specifically? these things are
>> mostly wicket internals and transparent to the application. if you
>> wanted to test them i doubt you would do it through the wickettester
>> itself.
>
> The first one was ISessionStore - I needed to use HttpSessionStore
> (the default one) for WicketSessionFilterTest.
> I had to rework BaseWicketTester to be able to actually setup
> HttpSessionStore. See commit #1131149.
>
> Today I needed to setup custom IPageManager and again I needed to
> debug why it is ignored/overridden.
> Looking at BaseWicketTester I see no other providers that override
> silently. I just need to touch the one for IPageManager.
>
>>
>>> Using boolean flag for all providers doesn't seem OK to me. Maybe we
>>> can provide BaseWicketTester#newXYZProvider() for all which can be
>>> overridden and if this method returns 'null' then don't override. This
>>> way the user can allow one inmemory impl but ignore another.
>>
>> either way works, as long as the default is not changed - eg tests run
>> with in-memory store and run fast.
>>
> I agree with 'fast'. I just didn't like that it is not possible to run
> with any other impl.
>
>> -igor
>>
>>>
>>> On Sun, Jun 5, 2011 at 6:46 PM, Igor Vaynberg <ig...@gmail.com> wrote:
>>>> i think the memory/mock things should be there by default because they
>>>> make the tests run faster. if you want to control it make it a boolean
>>>> on the tester itself. putting this kind of logic into application
>>>> class seems a little dirty.
>>>>
>>>> -igor
>>>>
>>>> On Sun, Jun 5, 2011 at 7:36 AM, Martin Grigorov <mg...@apache.org> wrote:
>>>>> Hi,
>>>>>
>>>>> I had some troubles recently to setup custom ISessionStore and
>>>>> IPageManager for some tests.
>>>>> The problem is that BaseWicketTester overrides anything already setup
>>>>> in MyApp#init() with the inmemory/mock impls.
>>>>> I suggest to move all these inmemory/mock impls in
>>>>> MockApplication#init() and all tests that use "new WicketTester()"
>>>>> will use those. All user's tests will have to override UserApp#init()
>>>>> for the tests if they prefer any inmemory/mock impl, otherwise they
>>>>> will use the default impl provided by Wicket (depends on DEPLOYMENT or
>>>>> DEVELOPMENT mode). This way they will be more close to the real
>>>>> environment and can setup inmemory impl *only* if they decide so.
>>>>>
>>>>> The only exception are IPageRendererProvider and IRequestCycleProvider
>>>>> which has to be special for WicketTester.
>>>>>
>>>>> WDYT ?
>>>>>
>>>>> --
>>>>> Martin Grigorov
>>>>> jWeekend
>>>>> Training, Consulting, Development
>>>>> http://jWeekend.com
>>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Martin Grigorov
>>> jWeekend
>>> Training, Consulting, Development
>>> http://jWeekend.com
>>>
>>
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>

Re: BaseWicketTester overrides the setup in MyApp#init()

Posted by Martin Grigorov <mg...@apache.org>.
On Sun, Jun 5, 2011 at 7:14 PM, Igor Vaynberg <ig...@gmail.com> wrote:
> On Sun, Jun 5, 2011 at 9:01 AM, Martin Grigorov <mg...@apache.org> wrote:
>> Currently MockApplication overrides #internalInit() (why not #init()
>> ?!) and setups almost similar inmemory/mock impls like the ones
>> BaseWicketTester overrides later.
>
> it does, but it is a very common scenario when components under test
> need to access something in application or session which is why we
> tell the users to use their own application class with tester.
>
>> I find it confusing that in my app I have to use #init() {
>> setXYZProvider(...)} but in tests this provider is overridden silently
>> by something else.
>
> which provider is causing you grief specifically? these things are
> mostly wicket internals and transparent to the application. if you
> wanted to test them i doubt you would do it through the wickettester
> itself.

The first one was ISessionStore - I needed to use HttpSessionStore
(the default one) for WicketSessionFilterTest.
I had to rework BaseWicketTester to be able to actually setup
HttpSessionStore. See commit #1131149.

Today I needed to setup custom IPageManager and again I needed to
debug why it is ignored/overridden.
Looking at BaseWicketTester I see no other providers that override
silently. I just need to touch the one for IPageManager.

>
>> Using boolean flag for all providers doesn't seem OK to me. Maybe we
>> can provide BaseWicketTester#newXYZProvider() for all which can be
>> overridden and if this method returns 'null' then don't override. This
>> way the user can allow one inmemory impl but ignore another.
>
> either way works, as long as the default is not changed - eg tests run
> with in-memory store and run fast.
>
I agree with 'fast'. I just didn't like that it is not possible to run
with any other impl.

> -igor
>
>>
>> On Sun, Jun 5, 2011 at 6:46 PM, Igor Vaynberg <ig...@gmail.com> wrote:
>>> i think the memory/mock things should be there by default because they
>>> make the tests run faster. if you want to control it make it a boolean
>>> on the tester itself. putting this kind of logic into application
>>> class seems a little dirty.
>>>
>>> -igor
>>>
>>> On Sun, Jun 5, 2011 at 7:36 AM, Martin Grigorov <mg...@apache.org> wrote:
>>>> Hi,
>>>>
>>>> I had some troubles recently to setup custom ISessionStore and
>>>> IPageManager for some tests.
>>>> The problem is that BaseWicketTester overrides anything already setup
>>>> in MyApp#init() with the inmemory/mock impls.
>>>> I suggest to move all these inmemory/mock impls in
>>>> MockApplication#init() and all tests that use "new WicketTester()"
>>>> will use those. All user's tests will have to override UserApp#init()
>>>> for the tests if they prefer any inmemory/mock impl, otherwise they
>>>> will use the default impl provided by Wicket (depends on DEPLOYMENT or
>>>> DEVELOPMENT mode). This way they will be more close to the real
>>>> environment and can setup inmemory impl *only* if they decide so.
>>>>
>>>> The only exception are IPageRendererProvider and IRequestCycleProvider
>>>> which has to be special for WicketTester.
>>>>
>>>> WDYT ?
>>>>
>>>> --
>>>> Martin Grigorov
>>>> jWeekend
>>>> Training, Consulting, Development
>>>> http://jWeekend.com
>>>>
>>>
>>
>>
>>
>> --
>> Martin Grigorov
>> jWeekend
>> Training, Consulting, Development
>> http://jWeekend.com
>>
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

Re: BaseWicketTester overrides the setup in MyApp#init()

Posted by Igor Vaynberg <ig...@gmail.com>.
On Sun, Jun 5, 2011 at 9:01 AM, Martin Grigorov <mg...@apache.org> wrote:
> Currently MockApplication overrides #internalInit() (why not #init()
> ?!) and setups almost similar inmemory/mock impls like the ones
> BaseWicketTester overrides later.

it does, but it is a very common scenario when components under test
need to access something in application or session which is why we
tell the users to use their own application class with tester.

> I find it confusing that in my app I have to use #init() {
> setXYZProvider(...)} but in tests this provider is overridden silently
> by something else.

which provider is causing you grief specifically? these things are
mostly wicket internals and transparent to the application. if you
wanted to test them i doubt you would do it through the wickettester
itself.

> Using boolean flag for all providers doesn't seem OK to me. Maybe we
> can provide BaseWicketTester#newXYZProvider() for all which can be
> overridden and if this method returns 'null' then don't override. This
> way the user can allow one inmemory impl but ignore another.

either way works, as long as the default is not changed - eg tests run
with in-memory store and run fast.

-igor

>
> On Sun, Jun 5, 2011 at 6:46 PM, Igor Vaynberg <ig...@gmail.com> wrote:
>> i think the memory/mock things should be there by default because they
>> make the tests run faster. if you want to control it make it a boolean
>> on the tester itself. putting this kind of logic into application
>> class seems a little dirty.
>>
>> -igor
>>
>> On Sun, Jun 5, 2011 at 7:36 AM, Martin Grigorov <mg...@apache.org> wrote:
>>> Hi,
>>>
>>> I had some troubles recently to setup custom ISessionStore and
>>> IPageManager for some tests.
>>> The problem is that BaseWicketTester overrides anything already setup
>>> in MyApp#init() with the inmemory/mock impls.
>>> I suggest to move all these inmemory/mock impls in
>>> MockApplication#init() and all tests that use "new WicketTester()"
>>> will use those. All user's tests will have to override UserApp#init()
>>> for the tests if they prefer any inmemory/mock impl, otherwise they
>>> will use the default impl provided by Wicket (depends on DEPLOYMENT or
>>> DEVELOPMENT mode). This way they will be more close to the real
>>> environment and can setup inmemory impl *only* if they decide so.
>>>
>>> The only exception are IPageRendererProvider and IRequestCycleProvider
>>> which has to be special for WicketTester.
>>>
>>> WDYT ?
>>>
>>> --
>>> Martin Grigorov
>>> jWeekend
>>> Training, Consulting, Development
>>> http://jWeekend.com
>>>
>>
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>

Re: BaseWicketTester overrides the setup in MyApp#init()

Posted by Martin Grigorov <mg...@apache.org>.
Currently MockApplication overrides #internalInit() (why not #init()
?!) and setups almost similar inmemory/mock impls like the ones
BaseWicketTester overrides later.

I find it confusing that in my app I have to use #init() {
setXYZProvider(...)} but in tests this provider is overridden silently
by something else.

Using boolean flag for all providers doesn't seem OK to me. Maybe we
can provide BaseWicketTester#newXYZProvider() for all which can be
overridden and if this method returns 'null' then don't override. This
way the user can allow one inmemory impl but ignore another.

On Sun, Jun 5, 2011 at 6:46 PM, Igor Vaynberg <ig...@gmail.com> wrote:
> i think the memory/mock things should be there by default because they
> make the tests run faster. if you want to control it make it a boolean
> on the tester itself. putting this kind of logic into application
> class seems a little dirty.
>
> -igor
>
> On Sun, Jun 5, 2011 at 7:36 AM, Martin Grigorov <mg...@apache.org> wrote:
>> Hi,
>>
>> I had some troubles recently to setup custom ISessionStore and
>> IPageManager for some tests.
>> The problem is that BaseWicketTester overrides anything already setup
>> in MyApp#init() with the inmemory/mock impls.
>> I suggest to move all these inmemory/mock impls in
>> MockApplication#init() and all tests that use "new WicketTester()"
>> will use those. All user's tests will have to override UserApp#init()
>> for the tests if they prefer any inmemory/mock impl, otherwise they
>> will use the default impl provided by Wicket (depends on DEPLOYMENT or
>> DEVELOPMENT mode). This way they will be more close to the real
>> environment and can setup inmemory impl *only* if they decide so.
>>
>> The only exception are IPageRendererProvider and IRequestCycleProvider
>> which has to be special for WicketTester.
>>
>> WDYT ?
>>
>> --
>> Martin Grigorov
>> jWeekend
>> Training, Consulting, Development
>> http://jWeekend.com
>>
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

Re: BaseWicketTester overrides the setup in MyApp#init()

Posted by Igor Vaynberg <ig...@gmail.com>.
i think the memory/mock things should be there by default because they
make the tests run faster. if you want to control it make it a boolean
on the tester itself. putting this kind of logic into application
class seems a little dirty.

-igor

On Sun, Jun 5, 2011 at 7:36 AM, Martin Grigorov <mg...@apache.org> wrote:
> Hi,
>
> I had some troubles recently to setup custom ISessionStore and
> IPageManager for some tests.
> The problem is that BaseWicketTester overrides anything already setup
> in MyApp#init() with the inmemory/mock impls.
> I suggest to move all these inmemory/mock impls in
> MockApplication#init() and all tests that use "new WicketTester()"
> will use those. All user's tests will have to override UserApp#init()
> for the tests if they prefer any inmemory/mock impl, otherwise they
> will use the default impl provided by Wicket (depends on DEPLOYMENT or
> DEVELOPMENT mode). This way they will be more close to the real
> environment and can setup inmemory impl *only* if they decide so.
>
> The only exception are IPageRendererProvider and IRequestCycleProvider
> which has to be special for WicketTester.
>
> WDYT ?
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>