Here is the pattern I was going to build:

Project proj-a creates a.jar which contains:
-- Interface A which is the API for the jar
-- Class AImpl which implements the API
-- Class AFactory which creates implementations of interface A

Project a-test creates a-test.jar which contains a MockObjects version of class 
AFactory which allows unit tests to preload the factory with a mock-object 
implementation of interface A to be returned by the factory

Project proj-b uses a.jar, so needs to define a dependency on a.jar with 
compile scope and a-test.jar with test scope.


My questions:

1) Is there a reason why the API class (interface A) needs to be in a separate 
project from the implementation classes (AImpl and AFactory)?

2) How do I define the dependencies in project proj-b to ensure that the 
mock-objects version of AFactory gets used during unit tests?

-----Original Message-----
From: Tim Dysinger [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, September 28, 2005 12:39
To: [EMAIL PROTECTED]; Brett Porter
Cc: Maven Users List
Subject: Re: Cross-project dependencies on unit test code


Ok.  Let's say we did it that way.  We are still faced with the same
problem with the maven-eclipse-plugin.  Maven-eclipse-plugin does not
like having your source and test directories the same.  

<sourceDirectory>${basedir}/src/java</sourceDirectory>
<unitTestSourceDirectory>${basedir}/src/java</unitTestSourceDirectory>

I can't do this without using eclipse.  The plugin, in this case, would
generate a bogus .classpath file.  

Putting the junit code in src/java is the only way I know that maven
will publish your jar so other projects can depened on it.  If you just
put your tests in src/test, maven will publish an empty jar and the
dependant project will fail to compile.

-Tim

On Wed, 2005-09-28 at 08:42 +1000, Brett Porter wrote:
> This has been asked 2 or 3 times this week. IIRC someone was going to
> write up their experience doing it? Would anyone like to volunteer to
> add it to the wiki?
> 
> - Brett
> 
> On 9/28/05, Raphaël Piéroni <[EMAIL PROTECTED]> wrote:
> > Hi Tim,
> >
> > May you try with something like this :
> > wrapper
> > +- core-api
> > +- core-test (depend only on api)
> > +- core-impl (with some test cases - depends on core-api and core-test
> > the later with scope test)
> > +- use-core-1 (depend on core-impl, depends on core-test at scope test -
> > the test cases must not depend on core-impl's tests)
> > +- use-core-2 (...)
> >
> > Then you move all the common test practices to the core-test project.
> >
> > May that helps.
> >
> > Regards,
> >
> > Raphaël.
> >
> > Tim Dysinger a écrit :
> >
> > >I have a "best practices" question.
> > >
> > >I have a multi-project setup with three sub-projects.  Two of the
> > >sub-projects have tests which subclass tests in the "core" project.
> > >However, just having the sub-projects depend on "core" does not expose
> > >the unit test code and the build fails with a compilation error.
> > >
> > >If I put the unit tests into the src/java directory, then the eclipse
> > >plugin generates duplicate source directories "src/java" in
> > >the .classpath file.
> > >
> > >I imagine that I could break out all the tests into other sub-projects
> > >but that seems clumsy and would double the number of projects in my
> > >multi-project setup.
> > >
> > >How do I deal with this elegantly?
> > >
> > >-Tim
> > >
> > >
> > >
> > >---------------------------------------------------------------------
> > >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]
> >
> >
> 
> ---------------------------------------------------------------------
> 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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to