Emmanuel Lecharny wrote:
Ooops. May be a little convo on IRC could help a lot avoiding the code
breaking I induced...
Let's keep this on the list.
+1
Also we *MUST* always make sure we summarize our conclusions on IRC.
+1 to this kind of wish
Please don't take this Emmanuel this is more a reminder to myself :-) as
well. We neeed to watch how much info is lost on IRC now that our IRC
channel's are not being logged anymore.
We must find a way to log those infos, and how to publish them.
Back to the pb, what about a test-setup subproject in apacheds project?
What do we have today?
========================
Right now apacheds has the following subprojects:
shared
core
main
plugin
Let's try to understand some of the dependencies:
main deps core
main deps shared
core deps plugin
core deps shared
plugin deps shared
The the unit testing "framework" (if you could call it that) for
apacheds' *core* is just composed of three classes. We're talking about
AbstractTestCase, AbstractAdminTestCase and AbstractNonAdminTestCase.
These test cases do not fire up the protocol providers for apacheds ...
just the core. This means you cannot do over the wire LDAP tests using
the SUN JNDI Provider or with JLDAP with these TestCase base classes.
This code just depends on the core and on shared.
In the *main* project resides another testcase base class called
AbstractServerTest which turns on the protocols in addition to firing up
the core. This code depends on the main, core and shared.
Why should we separate unit test base classes?
==============================================
Now let's ask ourselves why we need to separate this stuff out from core
and main. I think its because we don't want these necessarily shipping
with the core or the main since users may not be interested in unit
testing and hence do not require those classes or the jars they depend
on. It thus makes sense, why, you Emmanuel, did not want these files in
the src/main/java directory but in the src/test directory. So
separating them out of the core and main is a good idea. How this is
done or if it's worth doing is another story.
The How?
==========
Let's start first by just considering the core. It has the 3 abstract
test cases which must be removed however these test cases depend on core
classes. Core in turn depends on the test cases to drive its tests.
This imposes a cyclic dependency. So we cannot just separate the test
base classes from the core. We need to create some shared project that
both the core and the core-unit tests depend on to break the cycle. We
have the same situation for the main. In the end if we were to do this
right then we need to create 4 new maven child projects for apacheds:
core-shared
core-unit
main-shared
main-unit
Is it worth it?
==============
IMHO it is not worth creating 4 new maven projects to get 3 classes out
of the way. This is the conclusion I came to 6 months ago when I had
the idea of making this separation.
What do I think now? Well let's not mess with this:
(1) the entropy incurred for absolute correctness is too much
(2) the unit tests are nice to have in the jar: they're just there if
you need em
(3) the junit jar is not required as a dependency at runtime unless you
use the base unit tests
So in the end, I actually think it becomes more convenient to leave the
base test cases as-is in their respective src/main/java directories in
core and main respectively. Let's not bother with 4 new maven
projects. WDYT?
Alex