<html>
   <head>
       <title>TestNG - Welcome</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="http://testng.org/doc/banner.js"></script>
     </head>

<body onload="prettyPrint()">

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


<h2 >TestNG</h2>
<h2>Our book is now available</h2>
<p align="center">
<a href="book.html">
<img border="0" src="http://beust.com/pics/book-cover.jpg" />
</a>
</p>
<p align="center">
<a href="book.html">Click for more details.</a>
</p>



<p align="right"><font size="-2"><em>C&eacute;dric Beust (cedric at beust.com)<br>
Alexandru Popescu (the.mindstorm at gmail.com)<br>
Current version: 5.7<br>
Created:&nbsp;April 27th, 2004<br>
Last Modified:&nbsp; February 1st, 2008</em></font></p>


<p>TestNG is a testing framework inspired from JUnit and NUnit but introducing
some new functionalities that make it more powerful and easier to use, such as:</p>
<ul>
       <li>JDK 5 Annotations (JDK 1.4 is also supported with JavaDoc annotations).
       </li>
       <li>Flexible test configuration.
       </li>
       <li>Support for data-driven testing (with <tt>@DataProvider</tt>).</li>
       <li>Support for parameters.</li>
               <li>Allows distribution of tests on slave machines.</li>
       <li>Powerful execution model (no more <tt>TestSuite</tt>).
       </li>
       <li>Supported by a variety of tools and plug-ins (Eclipse, IDEA, Maven,
       etc...).
       </li>
       <li>Embeds BeanShell for further flexibility.
       </li>
       <li>Default JDK functions for runtime and logging (no dependencies).
       </li>
       <li>Dependent methods for application server testing.</li>
</ul>
<p>TestNG is designed to cover all categories of tests:&nbsp; unit, functional,
end-to-end, integration, etc...</p>
<p>I started TestNG out of frustration for some JUnit deficiencies which I have
documented on my weblog <a href="http://www.beust.com/weblog/archives/000173.html">here</a> and <a href="http://www.beust.com/weblog/archives/000082.html">here</a>
Reading these entries might give you a better idea of the goal I am trying to
achieve with TestNG.&nbsp; You can also check out a quick
<a href="http://www.beust.com/weblog/archives/000176.html">overview of the main
features</a> and an <a href="http://www.beust.com/weblog/archives/000170.html">
article</a> describing a very concrete example where the combined use of several
TestNG's features provides for a very intuitive and maintainable testing design.</p>
<p>Here is a very simple test:</p>

<pre class="prettyprint">
package example1;

import org.testng.annotations.*;

public class SimpleTest {

 @BeforeClass
 public void setUp() {
   // code that will be invoked when this test is instantiated
 }

 @Test(groups = { "fast" })
 public void aFastTest() {
   System.out.println("Fast test");
 }

 @Test(groups = { "slow" })
 public void aSlowTest() {
    System.out.println("Slow test");
 }

}
</pre>

The method <tt>setUp()</tt> will be invoked after the test class has been built and before
any test method is run.&nbsp; In this example, we will be running the group
fast, so <tt>aFastTest()</tt> will be invoked while <tt>aSlowTest()</tt> will be
skipped.<p>
<!-------------------------------------

 WRITING A TEST

 ------------------------------------>

Things to note:</p><ul>
       <li>No need to extend a class or implement an interface.</li><li>Even though the example above uses the JUnit conventions, our methods
       can be called any name you like, it's the annotations that tell TestNG what
       they are.</li><li>A test method can belong to one or several groups. These groups will be
       used at runtime to determine what test methods should be invoked..</li></ul>

       <p>

Once you have compiled your test class into the <tt>build</tt> directory, you
can invoke your test with the command line, an ant task (shown below) or an XML
file:


<pre class="prettyprint">
&lt;project default="test"&gt;

 &lt;path id="cp"&gt;
   &lt;pathelement location="lib/testng-testng-4.4-jdk15.jar"/&gt;
   &lt;pathelement location="build"/&gt;
 &lt;/path&gt;

 &lt;taskdef name="testng" classpathref="cp"
          classname="org.testng.TestNGAntTask" /&gt;

 &lt;target name="test"&gt;
   &lt;testng classpathref="cp" groups="fast"&gt;
     &lt;classfileset dir="build" includes="example1/*.class"/&gt;
   &lt;/testng&gt;
 &lt;/target&gt;

&lt;/project&gt;
</pre>

Use ant to invoke it:<pre class="code">
c:&gt; ant
Buildfile: build.xml

test:
[testng] Fast test
[testng] ===============================================
[testng] Suite for Command line test
[testng] Total tests run: 1, Failures: 0, Skips: 0
[testng] ===============================================


BUILD SUCCESSFUL
Total time: 4 seconds</pre><a name="browse_results" />Then you can browse the
result of your tests:<pre class="code">
start test-output\index.html <em>(on Windows)</em></pre>
<h3><a name="requirements">Requirements</a></h3>
<p>TestNG runs on JDK 1.4 and 5.&nbsp; The examples shown in this
documentation assume JDK 5 and therefore, use JDK 5 annotations, but they
can easily be translated to JDK 1.4 JavaDoc-type annotations.&nbsp; See the JDK
1.4 section for details.</p>

<h3><a name="mailing-lists">Mailing-lists</a></h3>
<p>The users mailing-list can be found in two different places:</p>
<ul>
       <li>As an email mailing-list on
       <a href="http://groups-beta.google.com/group/testng-users/">Google Groups</a>.</li>
       <li>As a <a href="http://testng.org/forums">Web
       forum</a>, kindly hosted by <a href="http://opensymphony.com">Open Symphony</a>.</li>
</ul>
<p>The Web forum and the mailing-list are connected to each other, so you only
need to subscribe to one.&nbsp; More specialized mailing-lists (developers,
issues, cvs, etc...) are
<a href="https://testng.dev.java.net/servlets/ProjectMailingListList">available
at Java.net.</a></p>
<h3><a name="locations-projects">Locations of the projects</a></h3>
<p>If you are interested in contributing to TestNG or one of the IDE plug-ins,
you will find them in the following locations:</p>
<ul>
       <li><a href="http://code.google.com/p/testng/">TestNG</a></li>
       <li><a href="http://code.google.com/p/testng-eclipse">Eclipse plug-in</a></li>
       <li><a href="http://www.javaforge.com/proj/summary.do?proj_id=4">IDEA
       IntelliJ plug-in</a></li>
       <li><a href="http://blogs.sun.com/xzajo?entry=test_ng_plugin_for_netbeans">
       NetBeans plug-in</a></li>
</ul>
<h3><a name="bug-reports">Bug reports</a></h3>
<p>The TestNG project is administered by
<a href="http://jira.opensymphony.com/browse/TESTNG">OpenSymphony's JIRA</a> and
you can file a bug report
<a href="http://jira.opensymphony.com/secure/CreateIssue!default.jspa">here</a>.</p>

<!-------------------------------------

 REQUIREMENTS

 ------------------------------------>
<p>For more information, you can either <a href="download.html">download TestNG</a>,
read the <a href="documentation-main.html">manual</a> or browse the links at the
<a href="#top">top</a>.</p>


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


</body>

</html>

