...
jira
...
issue
...
http://jira.codehaus.org/browse/MNG-32
...
current location of harness
mojo/mojo-sandbox/maven-plugin-testing/maven-plugin-testing-harness
...
what it is and isn't
...
The
...
harness
...
provides
...
an
...
abstract
...
base
...
class
...
for
...
testing
...
plugins
...
and
...
an
...
increasing
...
collection
...
of
...
stub
...
implementations
...
of
...
key
...
maven
...
classes.
...
Many
...
of
...
your
...
plugins
...
contain
...
plexus
...
components
...
which
...
should
...
be
...
populated
...
by
...
the
...
container
...
so
...
in
...
your
...
test
...
cases
...
you
...
will
...
be
...
'looking
...
up'
...
a
...
mojo
...
and
...
then
...
either
...
using
...
getters
...
and
...
setters
...
on
...
it
...
to
...
setup
...
the
...
mojo
...
or
...
make
...
use
...
of
...
the
...
PlexusConfiguration
...
step
...
that
...
lets
...
an
...
xml
...
snippet
...
on
...
disk
...
configuration
...
everything
...
for
...
you.
...
This
...
plugin
...
harness
...
is
...
not
...
the
...
be
...
all
...
end
...
all
...
solution
...
to
...
mojo
...
testing.
...
It
...
does
...
not
...
do
...
integration
...
testing
...
and
...
the
...
primary
...
scope
...
of
...
the
...
harness
...
is
...
to
...
provide
...
a
...
way
...
for
...
plugin
...
authors
...
to
...
create
...
a
...
fully
...
populated
...
instance
...
of
...
their
...
mojo
...
only
...
with
...
stubs
...
in
...
the
...
place
...
of
...
critical
...
maven
...
classes.
...
This
...
is
...
an
...
attempt
...
to
...
all
...
for
...
some
...
level
...
of
...
mojo
...
testing
...
without
...
needing
...
a
...
full
...
fledged
...
maven
...
execution
...
environment.
how to basically use it
Code Block |
---|
h5. how to basically use it {code} import org.codehaus.plexus.util.FileUtils; import org.apache.maven.plugins.testing.AbstractMojoTestCase; import java.io.File; public class CompilerMojoTest extends AbstractMojoTestCase { protected void setUp() throws Exception { // required for mojo lookups to work super.setUp(); } /** * tests the proper discovery and configuration of the mojo * * @throws Exception */ public void testCompilerTestEnvironment() throws Exception { File testPom = new File( getBasedir(), "target/test-classes/unit/compiler-basic-test/plugin-config.xml" ); CompilerMojo mojo = (CompilerMojo) lookupMojo ("compile", testPom ); assertNotNull( mojo ); } } {code} The first step is to make a test case in |
The first step is to make a test case in src/test/java
...
and
...
extend
...
the
...
AbstractMojoTestCase
...
class.
...
You
...
must
...
make
...
sure
...
that
...
your
...
setUp()
...
method
...
called
...
the
...
super.setUp()
...
otherwise
...
looking
...
up
...
your
...
components
...
will
...
fail.
...
Then
...
to
...
get
...
your
...
mojo
...
it
...
is
...
a
...
simple
...
matter
...
of
...
looking
...
up
...
the
...
mojo
...
and
...
passing
...
in
...
the
...
configuration
...
plugin
...
pom.
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} <project> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compileSourceRoots> <compileSourceRoot>${basedir}\target\test-classes\unit\compiler-basic-test\src\main\java</compileSourceRoot> </compileSourceRoots> <compilerId>javac</compilerId> <debug>true</debug> <outputDirectory>${basedir}\target\test\unit\compiler-basic-test\target\classes</outputDirectory> <buildDirectory>${basedir}\target\test\unit\compiler-basic-test\target</buildDirectory> <projectArtifact implementation="org.apache.maven.plugins.testing.stubs.StubArtifact"/> </configuration> </plugin> </plugins> </build> </project> {code} |
This
...
a
...
sample
...
plugin
...
configuration
...
file.
...
If
...
custom
...
expressions
...
are
...
needed
...
then
...
we
...
can
...
add
...
them
...
to
...
the
...
StubResolverExpressionEvaluator
...
class
...
in
...
the
...
plugin
...
harness
...
so
...
things
...
like
...
the
No Format |
---|
${basedir} |
above
...
are
...
taken
...
care
...
of.
...
Notice
...
the
...
projectArtifact
...
element
...
above
...
with
...
the
...
implementation=""
...
attribute.
...
This
...
is
...
how
...
you
...
will
...
inject
...
the
...
StubArtifact
...
implementation
...
into
...
that
...
projectArtifact
...
private
...
variable
...
on
...
the
...
mojo.
...
Additional
...
elements
...
can
...
be
...
inserted
...
as
...
child
...
elements
...
and
...
they
...
will
...
in
...
turn
...
be
...
assigned
...
to
...
the
...
variables
...
inside
...
that
...
object.
...
An
...
example
...
would
...
be
...
setting
...
the
...
groupId
...
variable
...
on
...
the
...
StubMavenProject.
...
Note:
...
these
...
internal
...
variable
...
might
...
also
...
need
...
implementation=""
...
attributes.
...