I agree, for a future version of Maven. What I think is needed is reusable test lifecycles so you get the source directory, compilation and resources sequence, and then the run.

You might also like to look at the slides from my talk at ApacheCon that cover the two alternatives that are available today: http://www.us.apachecon.com/c/acus2008/sessions/50

Cheers,
Brett

On 17/11/2008, at 1:08 AM, nicolas de loof wrote:

Hi,

First of all, please don't blame me for my horrible english. I'm french, and
french guys are known for beeing poor foreign language speackers...

maven default lifecycle defines integration-test phase, but AFAIK there is
no consensus (yet) on how to use it. Some wiki doc help to setup a
maven/surefire hack to split test into unit / integration based on naming
conventions, but nothing better.

I'd like to suggest some convention and maybe plugins enhancement to support
integration tests in a common way.

*What's an IT test ?
*Just to keep things clear, I thing "intergation-test" is a far too large word. Some of us consider tests that require a container (typically, war deployed and selenium test), some other consider tests that require host or network resources (DataBase-related tests) and others simply tests that
require complex setup and not just "unit" scope, like GWTTestCase or
Spring-related ones that start an ApplicationContext.

Based on this, I don't thing we can define a 100% consensus on how to define and run IT tests with maven. I'll focus on the simpliest use case : tests written in Java that you don't want / can't run before packaging. I suppose
the pre-integration test phase is enough to setup all required
infrastructure to get IT test running.

*What's wrong with the existing solutions ?
*Even it works in many cases, I don't like the Test naming convention hack
to use a shared target/test-classes for all tests

  - there is no way to distinguish unit and IT resources
- there is no nice distinction between unit and IT tests.This doesn't
  help newbee developpers to understand the role of such code
- hey, this really looks like an ugly maven hack ! We should support IT tests with no configuration as we support compilation and unit tests with a
  minimal POM.


*What is missing in maven ?*

  - there is no convention for an IT-tests source directory.
- there is no maven-compiler-plugin Mojo to handle such java sources,
  with a dedicated output folder
- there is no maven-resources-plugin Mojo to handle resources dedicated
  to IT tests
  - there is no maven-surefire-plugin Mojo to run them

*What can we do ?*

Define a dedicated directory for IT tests. As a new XML element in POM would require to change the ModelVersion with compatibility issues, I'd suggest to define a standard property project.build.integrationTestSourceDirectory (the
same way we did for encoding), with default value to
src/integration-test/java. Same for IT resources

Either define new Mojos in compiler, resources and surefire plugins (that
would require 3 new releases), or create a new
maven-integration-tests-plugin to share code from those 3 plugins and handle
the whole process :
compile integrationTestSourceDirectory to target/integration-tests- classes
copy IT resources to target/integration-tests-classes
run tests found in target/integration-tests-classes, with target/ classes and
target/test-classes in classpath.


Any suggestion, feedback or link to an existing solution is welcome

Cheers,
Nicolas

--
Brett Porter
[EMAIL PROTECTED]
http://blogs.exist.com/bporter/


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

Reply via email to