On Jul 9, 2012, at 10:56 AM, Thomas Mortagne wrote: > On Mon, Jul 9, 2012 at 10:34 AM, Vincent Massol <vinc...@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 <vinc...@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.
The real difference is the spirit of the test you're writing. One is about unit testing the other about integration testing. And ideally we should be doing a lot more unit tests than integration tests since those are also covered by functional tests (aka smoke tests). Thanks -Vincent _______________________________________________ devs mailing list devs@xwiki.org http://lists.xwiki.org/mailman/listinfo/devs