On Mon, Jul 9, 2012 at 10:34 AM, Vincent Massol
<vincent(a)massol.net> wrote:
On Jul 9, 2012, at 9:38 AM, Thomas Mortagne wrote:
On Mon, Jul 9, 2012 at 9:32 AM, Vincent Massol
<vincent(a)massol.net> wrote:
Hi devs,
Over the weekend I've brought one change to xwiki-commons-test.
Now by default when you write a unit test that extends AbstractMockingComponentTestCase
there will be no component registered against the component manager except those mocked
automatically by the @MockingRequirement annotation.
This has 2 advantages:
* This is the spirit of AbstractMockingComponentTestCase since they're supposed to
mock all dependencies and define their behaviors
* It makes the tests up to 10 times faster
If you really need to register some components, use the {@link ComponentList} annotation
and if you really really need to register all components (it takes time) then use {@link
AllComponents}.
Do we really need to support loading all components in
AbstractMockingComponentTestCase since there is
AbstractComponentTestCase for that ?
I have migrated all tests using AbstractMockingComponentTestCase and if you check the
commits you'll see I've used @AllComponents in several places. I started adding
the component implementations one by one but when I reached 10 or so I stopped doing it,
removed the list and instead used @AllComponents.
What this means is that the unit test is not correctly written and it needs to be
modified.
So yes @AllComponent should not be used in general and once we have fixed existing tests
we can remove it. We could revisit existing tests using @AllComponents and instead use
@ComponentList even if there are 20 entries in it and then remove @AllComponent. I
didn't have the courage to do this yesterday since I already spent a substantial time
on this.
Also note that AbstractMockingComponentTestCase and AbstractComponentTestCase are for
different needs:
* AbstractMockingComponentTestCase is for writing unit tests
* AbstractComponentTestCase is for writing integration tests
The real difference between then is that AbstractComponentTestCase is
loading all components which is why I suggested to use it if you need
to load all components.