<html>
    <head>
        <title>TestNG - Maven</title>

        <link rel="stylesheet" href="testng.css" type="text/css" />
        <link type="text/css" rel="stylesheet" href="http://beust.com/beust.css"  />
        <script type="text/javascript" src="http://beust.com/prettify.js"></script>
        <script type="text/javascript" src="banner.js"></script>
      </head>

<body onLoad="prettyPrint()">

<script type="text/javascript">
    displayMenu("maven.html")
</script>


<style type="text/css">
    *.P1 { font-family:Sans; font-size:10pt; margin-left:0in; margin-right:0in; text-align:left ! important; text-indent:0inch; color:#a52a2a; }
    *.P2 { font-family:Sans; font-size:10pt; margin-left:0in; margin-right:0in; text-align:left ! important; text-indent:0inch; }
    *.P3 { font-family:'Nimbus Roman No9 L'; font-size:12pt; margin-left:0in; margin-right:0in; text-align:left ! important; text-indent:0inch; }
    *.Standard { font-family:'Nimbus Roman No9 L'; font-size:12pt; }
    *.Textbody { font-family:'Nimbus Roman No9 L'; font-size:12pt; margin-top:0in; margin-bottom:0.0835in; }
    *.T1 { font-weight:bold; }
    *.T2 { color:#353535; }
    *.T3 { color:#a52a2a; font-weight:bold; }
    *.T4 { color:#a52a2a; }
    *.T5 { color:#353535; font-family:Sans; font-size:10pt; }
    *.T6 { color:#a52a2a; font-family:Sans; font-size:10pt; font-weight:bold; }
    *.T7 { color:#a52a2a; font-family:Sans; font-size:10pt; }
  p,pre { width: 80%; }

  ul.toc {
    list-style: none;
    margin:0 0.7em 0;
    padding:0;
    font-family: verdana, arial, sans-serif;
  }
  ul.toc li {
    padding:0;
    margin: 0.2em 0 0;
  }
  ul ul {
    margin:0 2em 0;
    padding: 0;
    list-style-type: none;
  }
  li a {
    display: block;
    text-decoration: none;
    padding: 2px 10px;
    width: 140px;
  }
  ul.sub li a {
    display: block;
    border-top: none;
    padding: 2px 10px;
    background-color: transparent;
  }
</style>

<h2>TestNG Maven plug-ins</h2>

<h4>Table of Contents</h4>
<ul class="toc">
  <li class="first">
    <a class="summary" href="#maven2">Maven2 Plugin</a>

    <ul class="sub">
      <li><a href="#archetype">Archetype</a></li>
    </ul>
  </li>
  
  <li class="last"><a class="summary" href="#maven1">Maven 1 Plugin</a></li>
</ul>

<!--
TestNG has plug-ins for both Maven 1 and Maven 2.
-->

<!--  begin maven2  -->
<h3 id="maven2">Maven 2</h3>

<p>Maven2 should support TestNG out of the box without the need to download any additional plugins <em>(other than TestNG itself)</em>.

<h4>Snapshot Build Updates</h4>
<p>
The latest current good version of the Surefire plugin that you want is <b>2.4</b>.  You can find the full instructions on the <a href="http://maven.apache.org/plugins/maven-surefire-plugin/">Surefire web site</a> (here are the <a href="http://maven.apache.org/plugins/maven-surefire-plugin/examples/testng.html">TestNG-specific instructions</a>).

<!--

</p>
<p>
  To get the apache ibiblio snapshot repository added to your Maven project you will need to add a section like
  the following to your <code>pom.xml</code>:
</p>

<pre class="prettyprint">
&lt;pluginRepositories&gt;
   &lt;pluginRepository&gt;
      &lt;id&gt;apache.snapshots&lt;/id&gt;
      &lt;url&gt;http://people.apache.org/repo/m2-snapshot-repository/&lt;/url&gt;
   &lt;/pluginRepository&gt;
&lt;/pluginRepositories&gt;
</pre>



<h4>Surefire Documentation</h4>
The TestNG Surefire documentation can be found on <a href="http://maven.apache.org/plugins/maven-surefire-plugin/testng.html">Apache's web site</a>.

<h4>Reference</h4>
<p>Though this section will include a lot more TestNG specific
features, the overall test plugin properties should be mostly covered on Maven's site.</p>

<h4>Overview</h4>
<p>Most of the configuration aspects with Maven will be centered around your pom.xml's <a href="http://maven.apache.org/maven-model/maven.html">build section</a>.  In here you define things like build output directories,
location of test source code, as well as configure plugin
parameters, like those you will need to get TestNG setup the
way that you prefer. Following is a sample portion of this
section in a pom.xml file.</p>

<pre class="prettyprint">
&lt;dependencies&gt;
&lt;dependency&gt;
  &lt;groupId&gt;org.testng&lt;/groupId&gt;
  &lt;artifactId&gt;testng&lt;/artifactId&gt;
  &lt;version&gt;5.5&lt;/version&gt;
  &lt;scope&gt;test&lt;/scope&gt;
  &lt;classifier&gt;jdk15&lt;/classifier&gt;
&lt;/dependency&gt;
&lt;dependencies&gt;

&lt;build&gt;
..
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
      &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.4-SNAPSHOT&lt;/version&gt;
      &lt;configuration&gt;
        &lt;groups&gt;functest,util&lt;/groups&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/build&gt;
</pre>

<p>
The most notable section is the <tt>configuration</tt> element. Within the boundaries of this element you can define all of
the configurable TestNG properties.
</p>

-->

<h4>Configuration</h4><h5>Goals</h5><table border="1" id="table2">
    <tr>
        <th>Goal</th><th>Description</th></tr><tr>
        <td><tt>test</tt></td><td>Compiles and runs your tests</td></tr><tr>
        <td><tt>site</tt></td><td>Creates your Maven generated site, which will include the TestNG report output.</td></tr></table><h4>Properties</h4><table border="1" id="table3">
    <tr>
        <th>Property</th><th>Optional?</th><th>Description</th></tr><tr>
        <td><tt>includes</tt></td><td>No</td><td>Comma delimited list of regexp patterns to include source files with. Ie **/Test*.java</td></tr><tr>
        <td><tt>groups</tt></td><td>Yes</td><td>Comma delimited list of groups to be included in test. If left blank will run all tests by default.</td></tr><tr>
        <td><tt>excludeGroups</tt></td><td>Yes</td><td>Comma delimited list of groups that should <em>not</em> be included in test run.</td></tr><tr>
        <td><tt>suiteXmlFiles</tt></td><td>Yes</td><td>Comma delimited list of file paths pointing to testng.xml suite files. <tt>(src/test-data/testng-core.xml,src/test-data/testng-functional.xml)</tt>
        <p><em>Warning: When defining suiteXmlFiles most of the other parameters are ignored.</em></p></td></tr><tr>
        <td><tt>threadCount</tt></td><td>Yes</td><td>Number of threads to run for tests</td></tr><tr>
        <td><tt>parallel</tt></td><td>Yes</td><td>When using threads, whether or not to run them in parallel. Use <em>tests</em> to have each test run in its own thread or
        <em>methods</em> to have the methods invoked from different threads.</td></tr>
  </table>

<h3>Java 1.4</h3>
<p>
In order to use javadoc style annotations you currently <em>must</em> run Maven with a java 1.4 jvm in order for them to be seen. If 
you try running your javadoc annotated tests in a 1.5 jvm they will most likely not be found. It is hoped in a future release this problem
will be eliminated.
</p>

<h4>Sample Report</h4>
<p>
A sample surefire report with TestNG can be found <a href="samplereport/index.html">here</a>.
</p>
<br/>
<!--  end maven2  -->

<!-- maven2 archetype -->
<h3 id="archetype">Maven TestNG Archetype <em>(Martin Gilday)</em></h3>
<p>
  Martin Gilday has added a new archetype for Maven2 users that should make it easier to get going with TestNG. You can find more about
  this in his blog entry <a href="http://www.martingilday.org/updates/Maven+TestNG+Archetype">here</a>,  but the basics for configuring it have been pasted below.
</p>
<p>
  To create a project using the archetype you simply have to specify my repository and the archetype ID.
</p>
  <pre class="prettyprint">
  mvn archetype:create -DgroupId=org.martingilday -DartifactId=test1 -DarchetypeGroupId=org.martingilday -DarchetypeArtifactId=testng-archetype
    -DarchetypeVersion=1.0-SNAPSHOT -DremoteRepositories=http://www.martingilday.org/repository/</pre>

<p>Of course substitute in your own groupId and artifactId.</p>
<p>Don't forget to keep checking back at <a href="http://www.martingilday.org/updates/Maven+TestNG+Archetype">Martin's blog</a> for more updates. </p>
<!-- end maven2 archetype -->

<br/><br/>
<h3 id="maven1">Maven 1 (by Andrew Glover)</h3>

<p>The TestNG Maven plug-in is quite simple and consists of
two goals and a series of optional properties.</p>

<p>Currently the 1.1 version of the plug-in is bundled with
official releases of TestNG. To utilize the plug-in, copy the
<tt>maven-testng-plugin-<version>.jar</tt> to the <tt>$MAVEN_HOME/plugins</tt>
directory.</p>

<p>For the latest version of the plug-in (1.2 as of 12/12/05),
update your <tt>maven.repo.remote</tt> to include <tt>http://www.vanwardtechnologies.com/repository/</tt>
and then issue the following command: <tt>maven plugin:download</tt>. Maven will issue a series of questions,
answer them as follows: <BR>
<BR>
<TABLE border="1" id="table1">
    <TR>
        <TD><tt>artifactId:</tt></TD>
        <TD><tt>maven-testng-plugin</tt></TD>
    </TR>
    <TR>
        <TD>groupId:</TD>
        <TD><tt>testng</tt></TD>
    </TR>
    <TR>
        <TD>version:</TD>
        <TD><tt>1.2</tt></TD>
    </TR>
</TABLE>
</p>


<h4>Goals</h4>
<table border="1" id="table2">
    <tr>
        <th>Goal</th>
        <th>Description</th>
    </tr>
    <tr>
        <td><tt>testng</tt></td>
        <td>Runs TestNG</td>
    </tr>
    <tr>
        <td><tt>testng:junit-report</tt></td>
        <td>Creates a JUnit style report</td>
    </tr>
</table>
<h4>Properties</h4>
<table border="1" id="table3">
    <tr>
        <th>Property</th>
        <th>Optional?</th>
        <th>Description</th>
    </tr>
    <tr>
        <td><tt>maven.testng.suitexml.name</tt></td>
        <td>Yes</td>
        <td>XML file name- defaults to <tt>testng.xml</tt></td>
    </tr>
    <tr>
        <td><tt>maven.testng.suitexml.dir</tt></td>
        <td>Yes</td>
        <td>Directory where XML file lives. Defaults to <tt>${basedir}/test/conf</tt></td>
    </tr>
    <tr>
        <td><tt>maven.testng.output.dir</tt></td>
        <td>Yes</td>
        <td>Default report directory. Defaults to <tt>${maven.build.dir}/testng-output</tt></td>
    </tr>
    <tr>
        <td><tt>maven.testng.source.dir</tt></td>
        <td>Yes</td>
        <td>For 1.4- where test source is. Defaults to <tt>${basedir}/test/java/</tt></td>
    </tr>
    <tr>
        <td><tt>maven.testng.report.dir</tt></td>
        <td>Yes</td>
        <td>Directory for JUnit reports. Defaults to <tt>${maven.build.dir}/testngJunitReport</tt></td>
    </tr>
</table>

<p>A sample JUnit sytle report generated via the TestNG maven
plug-in can be found <A
    HREF="http://www.vanwardtechnologies.com/nfjs/testng/sample-report/junit-noframes.html#top">here</A>.
</p>
<!-- end maven stuff -->

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script type="text/javascript">
_uacct = "UA-238215-2";
urchinTracker();
</script>
	
</body>
