<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2018-06-05
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20180605" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Tycho Surefire Plugin &#x2013; tycho-surefire:test</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.3.0.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />

      
    <script type="text/javascript" src="./js/apache-maven-fluido-1.3.0.min.js"></script>

    
            </head>
        <body class="topBarDisabled">
          
        
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                <div id="bannerLeft">
                <h2>Tycho Surefire Plugin</h2>
                </div>
                      </div>
        <div class="pull-right">  </div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
                
                    
                  <li id="publishDate">Last Published: 2018-06-05</li>
                  <li class="divider">|</li> <li id="projectVersion">Version: 1.2.0</li>
                      
                
                    
      
                            </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span3">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">Tycho</li>
                                
      <li>
    
                          <a href="../index.html" title="Introduction">
          <i class="none"></i>
        Introduction</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-compiler-plugin/plugin-info.html" title="Compiler Plugin">
          <i class="none"></i>
        Compiler Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-packaging-plugin/plugin-info.html" title="Packaging Plugin">
          <i class="none"></i>
        Packaging Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../BuildProperties.html" title="Build Properties">
          <i class="none"></i>
        Build Properties</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-surefire/tycho-surefire-plugin/plugin-info.html" title="Surefire Plugin">
          <i class="none"></i>
        Surefire Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-p2/tycho-p2-publisher-plugin/plugin-info.html" title="p2 Publisher Plugin">
          <i class="none"></i>
        p2 Publisher Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-p2/tycho-p2-repository-plugin/plugin-info.html" title="p2 Repository Plugin">
          <i class="none"></i>
        p2 Repository Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-p2/tycho-p2-director-plugin/plugin-info.html" title="p2 Director Plugin">
          <i class="none"></i>
        p2 Director Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-source-plugin/plugin-info.html" title="Source Plugin">
          <i class="none"></i>
        Source Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-release/tycho-versions-plugin/plugin-info.html" title="Versions Plugin">
          <i class="none"></i>
        Versions Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../tycho-pomgenerator-plugin/plugin-info.html" title="POM Generator Plugin">
          <i class="none"></i>
        POM Generator Plugin</a>
            </li>
                  
      <li>
    
                          <a href="../TychoProperties.html" title="Tycho Properties">
          <i class="none"></i>
        Tycho Properties</a>
            </li>
            </ul>
                
                    
                
          <hr class="divider" />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
      </a>
                  </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span9" >
                                  
            
  
    <div class="section">
<h2><a name="tycho-surefire:test"></a>tycho-surefire:test</h2>
      
<p><b>Full name</b>:</p>
      
<p>org.eclipse.tycho:tycho-surefire-plugin:1.2.0:test</p>
      
<p><b>Description</b>:</p>
      
<div>
<p>Executes tests in an OSGi runtime.</p>

<p>The goal launches an OSGi runtime and executes the project's
tests in that runtime. The &quot;test runtime&quot; consists of the bundle
built in this project and its transitive dependencies, plus some
Equinox and test harness bundles. The bundles are resolved from the
target platform of the project. Note that the test runtime does
typically <i>not</i> contain the entire target platform. If there
are implicitly required bundles (e.g.
<tt>org.eclipse.equinox.ds</tt> to make declarative services work),
they need to be added manually through an
<tt>extraRequirements</tt> configuration on the
<tt>target-platform-configuration</tt> plugin.</p></div>
      
<p><b>Attributes</b>:</p>
      
<ul>
        
<li>Requires a Maven project to be executed.</li>
        
<li>Requires dependency resolution of artifacts in scope: <tt>runtime</tt>.</li>
        
<li>Binds by default to the <a class="externalLink" href="http://maven.apache.org/ref/current/maven-core/lifecycles.html">lifecycle phase</a>: <tt>integration-test</tt>.</li>
      </ul>
      
<div class="section">
<h3><a name="Optional_Parameters"></a>Optional Parameters</h3>
        
<table class="table table-striped" border="0">
          
<tr class="a">
            
<th>Name</th>
            
<th>Type</th>
            
<th>Since</th>
            
<th>Description</th>
          </tr>
          
<tr class="b">
            
<td><b><a href="#appArgLine">appArgLine</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Arbitrary applications arguments to set on the command line.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#application">application</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Eclipse application to be run. If not specified, default
application org.eclipse.ui.ide.workbench will be used. Application
runnable will be invoked from test harness, not directly from
Eclipse. Note that you need to ensure that the bundle which defines
the configured application is included in the test runtime.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#argLine">argLine</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Arbitrary JVM options to set on the command line.<br /><b>User property is</b>: <tt>tycho.testArgLine</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#bundleStartLevel">bundleStartLevel</a></b></td>
            
<td><tt>BundleStartLevel[]</tt></td>
            
<td><tt>-</tt></td>
            
<td>Bundle start level and auto start configuration used by the test
runtime. Ignored if <tt>testRuntime</tt> is
<tt>p2Installed</tt>. Example: 

<div>
<pre>
&lt;bundleStartLevel&gt;
  &lt;bundle&gt;
    &lt;id&gt;foo.bar.myplugin&lt;/id&gt;
    &lt;level&gt;6&lt;/level&gt;
    &lt;autoStart&gt;true&lt;/autoStart&gt;
  &lt;/bundle&gt;
&lt;/bundleStartLevel&gt;
</pre></div><br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#debugPort">debugPort</a></b></td>
            
<td><tt>int</tt></td>
            
<td><tt>-</tt></td>
            
<td>Set this parameter to suspend the test JVM waiting for a client to
open a remote debug session on the specified port.<br /><b>User property is</b>: <tt>debugPort</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#defaultStartLevel">defaultStartLevel</a></b></td>
            
<td><tt>BundleStartLevel</tt></td>
            
<td><tt>-</tt></td>
            
<td>The default bundle start level and auto start configuration used by
the test runtime for bundles where the start level/auto start is
not configured in <tt>bundleStartLevel</tt>. Ignored if
<tt>testRuntime</tt> is <tt>p2Installed</tt>. Example: 

<div>
<pre>
  &lt;defaultStartLevel&gt;
    &lt;level&gt;6&lt;/level&gt;
    &lt;autoStart&gt;true&lt;/autoStart&gt;
  &lt;/defaultStartLevel&gt;
</pre></div><br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#deleteOsgiDataDirectory">deleteOsgiDataDirectory</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Whether to recursively delete the directory
<tt>osgiDataDirectory</tt> before running the tests.<br /><b>Default value is</b>: <tt>true</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#dependencies">dependencies</a></b></td>
            
<td><tt>Dependency[]</tt></td>
            
<td><tt>-</tt></td>
            
<td>Additional dependencies to be added to the test runtime. Ignored if
<tt>testRuntime</tt> is <tt>p2Installed</tt>. Note: This
parameter has only limited support for dependencies to artifacts
within the reactor. Therefore it is recommended to specify
<tt>extraRequirements</tt> on the
<tt>target-platform-configuration</tt> plugin instead. Example: 

<div>
<pre>
&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
   &lt;artifactId&gt;target-platform-configuration&lt;/artifactId&gt;
   &lt;version&gt;${tycho-version}&lt;/version&gt;
   &lt;configuration&gt;
      &lt;dependency-resolution&gt;
         &lt;extraRequirements&gt;
            &lt;requirement&gt;
               &lt;type&gt;eclipse-feature&lt;/type&gt;
               &lt;id&gt;example.project.feature&lt;/id&gt;
               &lt;versionRange&gt;0.0.0&lt;/versionRange&gt;
            &lt;/requirement&gt;
         &lt;/extraRequirements&gt;
      &lt;/dependency-resolution&gt;
   &lt;/configuration&gt;
&lt;/plugin&gt;
</pre></div>

The dependencies specified as <tt>extraRequirements</tt> are -
together with the dependencies specified in the
<tt>MANIFEST.MF</tt> of the project - transitively resolved against
the target platform. The resulting set of bundles is included in
the test runtime.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#environmentVariables">environmentVariables</a></b></td>
            
<td><tt>Map</tt></td>
            
<td><tt>-</tt></td>
            
<td>Additional environments to set for the forked test JVM.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#excludedGroups">excludedGroups</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>(junit47 provider with JUnit4.8+ only) Excluded groups/categories
(comma-separated). Any methods/classes/etc with one of the
groups/categories specified in this list will specifically not be
run. For JUnit, this parameter forces the use of the junit47
provider<br /><b>User property is</b>: <tt>excludedGroups</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#excludes">excludes</a></b></td>
            
<td><tt>List</tt></td>
            
<td><tt>-</tt></td>
            
<td>List of patterns (separated by commas) used to specify the tests
that should be excluded in testing. When not specified and when the
<tt>test</tt> parameter is not specified, the default excludes
will be <tt>**/*$*</tt> (which excludes all inner classes).<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#explodedBundles">explodedBundles</a></b></td>
            
<td><tt>String[]</tt></td>
            
<td><tt>-</tt></td>
            
<td>List of bundles that must be expanded in order to execute the
tests. Ignored if <tt>testRuntime</tt> is
<tt>p2Installed</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#failIfNoTests">failIfNoTests</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>If set to &quot;false&quot; the test execution will not fail in case there
are no tests found.<br /><b>Default value is</b>: <tt>true</tt>.<br /><b>User property is</b>: <tt>failIfNoTests</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#forkedProcessTimeoutInSeconds">forkedProcessTimeoutInSeconds</a></b></td>
            
<td><tt>int</tt></td>
            
<td><tt>-</tt></td>
            
<td>Kill the forked test process after a certain number of seconds. If
set to 0, wait forever for the process, never timing out.<br /><b>User property is</b>: <tt>surefire.timeout</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#frameworkExtensions">frameworkExtensions</a></b></td>
            
<td><tt>Dependency[]</tt></td>
            
<td><tt>-</tt></td>
            
<td>List of framework extension bundles to add. Note: The goal does not
automatically detect which bundles in the test runtime are
framework extensions, but they have to be explicitly specified
using this parameter. Ignored if <tt>testRuntime</tt> is
<tt>p2Installed</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#groups">groups</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>(junit47 provider with JUnit4.8+ only) Groups/categories for this
test (comma-separated). Only classes/methods/etc decorated with one
of the group/category specified here will be included in test run,
if specified. For JUnit, this parameter forces the use of the
junit47 provider<br /><b>User property is</b>: <tt>groups</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#includes">includes</a></b></td>
            
<td><tt>List</tt></td>
            
<td><tt>-</tt></td>
            
<td>List of patterns (separated by commas) used to specify the tests
that should be included in testing. When not specified and whent
the <tt>test</tt> parameter is not specified, the default
includes will be <tt>**/Test*.java **/*Test.java
**/*TestCase.java</tt><br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#osgiDataDirectory">osgiDataDirectory</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td><a class="externalLink" href="http://help.eclipse.org/juno/topic/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html#osgiinstancearea">OSGi
data directory</a> (<tt>osgi.instance.area</tt>, aka the
workspace) of the Equinox runtime used to execute tests.<br /><b>Default value is</b>: <tt>${project.build.directory}/work/data/</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#parallel">parallel</a></b></td>
            
<td><tt>ParallelMode</tt></td>
            
<td><tt>0.16.0</tt></td>
            
<td>(JUnit 4.7 provider) Supports values &quot;classes&quot;/&quot;methods&quot;/&quot;both&quot; to
run in separate threads, as controlled by threadCount.<br /><b>User property is</b>: <tt>parallel</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#perCoreThreadCount">perCoreThreadCount</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>0.16.0</tt></td>
            
<td>(JUnit 4.7 provider) Indicates that threadCount is per cpu core.<br /><b>Default value is</b>: <tt>true</tt>.<br /><b>User property is</b>: <tt>perCoreThreadCount</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#pluginArtifacts">pluginArtifacts</a></b></td>
            
<td><tt>List</tt></td>
            
<td><tt>-</tt></td>
            
<td>(no description)<br /><b>User property is</b>: <tt>plugin.artifacts</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#product">product</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Eclipse product to be run, i.e. -product parameter passed to test
Eclipse runtime.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#profileName">profileName</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>0.19.0</tt></td>
            
<td>p2 <a class="externalLink" href="http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fp2_director.html">profile</a>
name of the installation under test. Only relevant if
<tt>testRuntime</tt> is <tt>p2Installed</tt>. If tests are
installed on top of an already existing installation in
<tt>work</tt>, this must match the name of the existing
profile.<br /><b>Default value is</b>: <tt>DefaultProfile</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#providerHint">providerHint</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>0.16.0</tt></td>
            
<td>Normally tycho will automatically determine the test framework
provider based on the test project's classpath. Use this to force
using a test framework provider implementation with the given role
hint. Tycho comes with providers &quot;junit3&quot;,&quot;junit4&quot;,&quot;junit47&quot;. Note
that when specifying a providerHint, you have to make sure the
provider is actually available in the dependencies of
tycho-surefire-plugin.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#providerProperties">providerProperties</a></b></td>
            
<td><tt>Properties</tt></td>
            
<td><tt>0.16.0</tt></td>
            
<td>Use this to specify surefire provider-specific properties.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#redirectTestOutputToFile">redirectTestOutputToFile</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Set this to &quot;true&quot; to redirect the unit test standard output to a
file (found in reportsDirectory/testName-output.txt).<br /><b>Default value is</b>: <tt>false</tt>.<br /><b>User property is</b>: <tt>maven.test.redirectTestOutputToFile</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#reportsDirectory">reportsDirectory</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td>Base directory where all reports are written to.<br /><b>Default value is</b>: <tt>${project.build.directory}/surefire-reports</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#rerunFailingTestsCount">rerunFailingTestsCount</a></b></td>
            
<td><tt>Integer</tt></td>
            
<td><tt>-</tt></td>
            
<td>Flaky tests will re-run until they pass or the number of reruns has
been exhausted. See surefire documentation for details. 

<p>Note: This feature is supported only for JUnit 4.x</p><br /><b>Default value is</b>: <tt>0</tt>.<br /><b>User property is</b>: <tt>surefire.rerunFailingTestsCount</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#runOrder">runOrder</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>0.19.0</tt></td>
            
<td>Defines the order the tests will be run in. Supported values are
&quot;alphabetical&quot;, &quot;reversealphabetical&quot;, &quot;random&quot;, &quot;hourly&quot;
(alphabetical on even hours, reverse alphabetical on odd hours) and
&quot;filesystem&quot;.<br /><b>Default value is</b>: <tt>filesystem</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#showEclipseLog">showEclipseLog</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Enables -debug -consolelog for the test OSGi runtime<br /><b>Default value is</b>: <tt>false</tt>.<br /><b>User property is</b>: <tt>tycho.showEclipseLog</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#skip">skip</a></b></td>
            
<td><tt>Boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Same as <tt>skipTests</tt><br /><b>User property is</b>: <tt>maven.test.skip</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#skipAfterFailureCount">skipAfterFailureCount</a></b></td>
            
<td><tt>Integer</tt></td>
            
<td><tt>-</tt></td>
            
<td>Skips the remaining tests after the Nth failure or error. See
surefire documentation for details.<br /><b>Default value is</b>: <tt>0</tt>.<br /><b>User property is</b>: <tt>surefire.skipAfterFailureCount</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#skipExec">skipExec</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td><b>Deprecated.</b> Use skipTests instead.<br /><b>User property is</b>: <tt>maven.test.skipExec</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#skipTests">skipTests</a></b></td>
            
<td><tt>Boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Set this to &quot;true&quot; to skip running tests, but still compile them.
Its use is NOT RECOMMENDED, but quite convenient on occasion.
Default: <tt>false</tt><br /><b>User property is</b>: <tt>skipTests</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#suiteXmlFiles">suiteXmlFiles</a></b></td>
            
<td><tt>List</tt></td>
            
<td><tt>-</tt></td>
            
<td>Only supported by the TestNG test provider. The values specified
are passed to TestNG as test suite files. The suite files will
overwrite the <tt>includes</tt> and <tt>excludes</tt>
patterns. The path to the suite file(s) could be relative (test
bundle classpath) or an absolute path to xml files outside the test
bundle. 

<div>
<pre>
&lt;configuration&gt;
  &lt;suiteXmlFiles&gt;
    &lt;suiteXmlFile&gt;myTestSuite.xml&lt;/suiteXmlFile&gt;
  &lt;/suiteXmlFiles&gt;
&lt;/configuration&gt;
</pre></div><br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#surefireProperties">surefireProperties</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td>(no description)<br /><b>Default value is</b>: <tt>${project.build.directory}/surefire.properties</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#systemProperties">systemProperties</a></b></td>
            
<td><tt>Map</tt></td>
            
<td><tt>-</tt></td>
            
<td>Additional system properties to set for the forked test JVM.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#test">test</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Specify this parameter if you want to use the test pattern matching
notation, Ant pattern matching, to select tests to run. The Ant
pattern will be used to create an include pattern formatted like
<tt>**/${test}.java</tt> When used, the <tt>includes</tt>
and <tt>excludes</tt> patterns parameters are ignored<br /><b>User property is</b>: <tt>test</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#testClass">testClass</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>-</tt></td>
            
<td>Identifies a single test (suite) class to run. This is useful if
you have a single JUnit test suite class defining which tests
should be executed. Will be ignored if <tt>test</tt> is
specified. Example: 

<div>
<pre>
&lt;testClass&gt;foo.bar.FooTest&lt;/testClass&gt;
</pre></div><br /><b>User property is</b>: <tt>testClass</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#testClassesDirectory">testClassesDirectory</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td>The directory containing generated test classes of the project
being tested.<br /><b>User property is</b>: <tt>project.build.outputDirectory</tt>.</td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#testFailureIgnore">testFailureIgnore</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Set this to true to ignore a failure during testing. Its use is NOT
RECOMMENDED, but quite convenient on occasion.<br /><b>Default value is</b>: <tt>false</tt>.<br /><b>User property is</b>: <tt>maven.test.failure.ignore</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#testRuntime">testRuntime</a></b></td>
            
<td><tt>String</tt></td>
            
<td><tt>0.19.0</tt></td>
            
<td>How to create the OSGi test runtime. Allowed values are
<tt>default</tt> and <tt>p2Installed</tt>. Mode
<tt>p2Installed</tt> is <b>EXPERIMENTAL</b> - only works when
installing products under test (see below). 

<ul>

<li>In <tt>default</tt> mode, all necessary files to define the
test runtime like <tt>config.ini</tt> are generated by tycho. This
installation mode has the advantage that the test runtime is
minimal (defined by the transitive dependencies of the test bundle
plus and the test harness) and existing bundle jars are referenced
rather than copied for the installation</li>

<li>In <tt>p2Installed</tt> mode, use p2 director to install
test bundle, test harness bundles and respective dependencies. This
installation mode can be used for integration tests that require a
fully p2-provisioned installation. To install a product IU, add it
as extra requirement to the test bundle (see example below). Note
that this installation mode comes with a certain performance
overhead for executing the provisioning operations otherwise not
required.</li>
</ul>
Example configuration which will install product IU under test
&quot;example.product.id&quot; using p2: 

<div>
<pre>
&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
   &lt;artifactId&gt;tycho-surefire-plugin&lt;/artifactId&gt;
   &lt;version&gt;${tycho-version}&lt;/version&gt;
   &lt;configuration&gt;
      &lt;testRuntime&gt;p2Installed&lt;/testRuntime&gt;
   &lt;/configuration&gt;
&lt;/plugin&gt;
&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
   &lt;artifactId&gt;target-platform-configuration&lt;/artifactId&gt;
   &lt;version&gt;${tycho-version}&lt;/version&gt;
   &lt;configuration&gt;
      &lt;dependency-resolution&gt;
         &lt;extraRequirements&gt;
            &lt;!-- product IU under test --&gt;
            &lt;requirement&gt;
               &lt;type&gt;p2-installable-unit&lt;/type&gt;
               &lt;id&gt;example.product.id&lt;/id&gt;
               &lt;versionRange&gt;0.0.0&lt;/versionRange&gt;
            &lt;/requirement&gt;
         &lt;/extraRequirements&gt;
      &lt;/dependency-resolution&gt;
   &lt;/configuration&gt;
&lt;/plugin&gt;
</pre></div><br /><b>Default value is</b>: <tt>default</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#threadCount">threadCount</a></b></td>
            
<td><tt>int</tt></td>
            
<td><tt>0.16.0</tt></td>
            
<td>(JUnit 4.7 provider) The attribute thread-count allows you to
specify how many threads should be allocated for this execution.
Only makes sense to use in conjunction with the parallel parameter.<br /><b>User property is</b>: <tt>threadCount</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#useJDK">useJDK</a></b></td>
            
<td><tt>ToolchainProvider$JDKUsage</tt></td>
            
<td><tt>-</tt></td>
            
<td>Which JDK to use for executing tests. Possible values are:
<tt>SYSTEM</tt>, <tt>BREE</tt> . 

<ul>

<li>SYSTEM: Use the currently running JVM (or from <a class="externalLink" href="http://maven.apache.org/guides/mini/guide-using-toolchains.html">toolchain</a>
if configured in pom.xml)</li>

<li>BREE: use MANIFEST header
<tt>Bundle-RequiredExecutionEnvironment</tt> to lookup the JDK
from <a class="externalLink" href="http://maven.apache.org/guides/mini/guide-using-toolchains.html">toolchains.xml</a>.
The value of BREE will be matched against the id of the toolchain
elements in toolchains.xml.</li>
</ul>
Example for BREE: <br />
In <tt>META-INF/MANIFEST.MF</tt>: 

<div>
<pre>
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
</pre></div>

In toolchains.xml: 

<div>
<pre>
&lt;toolchains&gt;
   &lt;toolchain&gt;
      &lt;type&gt;jdk&lt;/type&gt;
      &lt;provides&gt;
         &lt;id&gt;JavaSE-1.7&lt;/id&gt;
      &lt;/provides&gt;
      &lt;configuration&gt;
         &lt;jdkHome&gt;/path/to/jdk/1.7&lt;/jdkHome&gt;
      &lt;/configuration&gt;
   &lt;/toolchain&gt;
&lt;/toolchains&gt;
</pre></div><br /><b>Default value is</b>: <tt>SYSTEM</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#useUIHarness">useUIHarness</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Run tests using UI (true) or headless (false) test harness.<br /><b>Default value is</b>: <tt>false</tt>.<br /></td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#useUIThread">useUIThread</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>-</tt></td>
            
<td>Run tests in UI (true) or background (false) thread. Only applies
to UI test harness.<br /><b>Default value is</b>: <tt>true</tt>.<br /></td>
          </tr>
          
<tr class="b">
            
<td><b><a href="#useUnlimitedThreads">useUnlimitedThreads</a></b></td>
            
<td><tt>boolean</tt></td>
            
<td><tt>0.16.0</tt></td>
            
<td>(JUnit 4.7 provider) Indicates that the thread pool will be
unlimited. The parallel parameter and the actual number of
classes/methods will decide. Setting this to &quot;true&quot; effectively
disables perCoreThreadCount and threadCount.<br /><b>Default value is</b>: <tt>false</tt>.<br /><b>User property is</b>: <tt>useUnlimitedThreads</tt>.</td>
          </tr>
          
<tr class="a">
            
<td><b><a href="#work">work</a></b></td>
            
<td><tt>File</tt></td>
            
<td><tt>-</tt></td>
            
<td>Root directory (<a class="externalLink" href="http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html#osgiinstallarea">osgi.install.area</a>)
of the Equinox runtime used to execute tests.<br /><b>Default value is</b>: <tt>${project.build.directory}/work</tt>.<br /></td>
          </tr>
        </table>
      </div>
      
<div class="section">
<h3><a name="Parameter_Details"></a>Parameter Details</h3>
        
<p><b><a name="appArgLine">appArgLine</a>:</b></p>
        
<div>Arbitrary applications arguments to set on the command line.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="application">application</a>:</b></p>
        
<div>Eclipse application to be run. If not specified, default
application org.eclipse.ui.ide.workbench will be used. Application
runnable will be invoked from test harness, not directly from
Eclipse. Note that you need to ensure that the bundle which defines
the configured application is included in the test runtime.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="argLine">argLine</a>:</b></p>
        
<div>Arbitrary JVM options to set on the command line.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>tycho.testArgLine</tt></li>
        </ul><hr />
<p><b><a name="bundleStartLevel">bundleStartLevel</a>:</b></p>
        
<div>Bundle start level and auto start configuration used by the test
runtime. Ignored if <tt>testRuntime</tt> is
<tt>p2Installed</tt>. Example: 

<div>
<pre>
&lt;bundleStartLevel&gt;
  &lt;bundle&gt;
    &lt;id&gt;foo.bar.myplugin&lt;/id&gt;
    &lt;level&gt;6&lt;/level&gt;
    &lt;autoStart&gt;true&lt;/autoStart&gt;
  &lt;/bundle&gt;
&lt;/bundleStartLevel&gt;
</pre></div></div>
        
<ul>
          
<li><b>Type</b>: <tt>org.eclipse.sisu.equinox.launching.BundleStartLevel[]</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="debugPort">debugPort</a>:</b></p>
        
<div>Set this parameter to suspend the test JVM waiting for a client to
open a remote debug session on the specified port.</div>
        
<ul>
          
<li><b>Type</b>: <tt>int</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>debugPort</tt></li>
        </ul><hr />
<p><b><a name="defaultStartLevel">defaultStartLevel</a>:</b></p>
        
<div>The default bundle start level and auto start configuration used by
the test runtime for bundles where the start level/auto start is
not configured in <tt>bundleStartLevel</tt>. Ignored if
<tt>testRuntime</tt> is <tt>p2Installed</tt>. Example: 

<div>
<pre>
  &lt;defaultStartLevel&gt;
    &lt;level&gt;6&lt;/level&gt;
    &lt;autoStart&gt;true&lt;/autoStart&gt;
  &lt;/defaultStartLevel&gt;
</pre></div></div>
        
<ul>
          
<li><b>Type</b>: <tt>org.eclipse.sisu.equinox.launching.BundleStartLevel</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="deleteOsgiDataDirectory">deleteOsgiDataDirectory</a>:</b></p>
        
<div>Whether to recursively delete the directory
<tt>osgiDataDirectory</tt> before running the tests.</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>true</tt></li>
        </ul><hr />
<p><b><a name="dependencies">dependencies</a>:</b></p>
        
<div>Additional dependencies to be added to the test runtime. Ignored if
<tt>testRuntime</tt> is <tt>p2Installed</tt>. Note: This
parameter has only limited support for dependencies to artifacts
within the reactor. Therefore it is recommended to specify
<tt>extraRequirements</tt> on the
<tt>target-platform-configuration</tt> plugin instead. Example: 

<div>
<pre>
&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
   &lt;artifactId&gt;target-platform-configuration&lt;/artifactId&gt;
   &lt;version&gt;${tycho-version}&lt;/version&gt;
   &lt;configuration&gt;
      &lt;dependency-resolution&gt;
         &lt;extraRequirements&gt;
            &lt;requirement&gt;
               &lt;type&gt;eclipse-feature&lt;/type&gt;
               &lt;id&gt;example.project.feature&lt;/id&gt;
               &lt;versionRange&gt;0.0.0&lt;/versionRange&gt;
            &lt;/requirement&gt;
         &lt;/extraRequirements&gt;
      &lt;/dependency-resolution&gt;
   &lt;/configuration&gt;
&lt;/plugin&gt;
</pre></div>

The dependencies specified as <tt>extraRequirements</tt> are -
together with the dependencies specified in the
<tt>MANIFEST.MF</tt> of the project - transitively resolved against
the target platform. The resulting set of bundles is included in
the test runtime.</div>
        
<ul>
          
<li><b>Type</b>: <tt>org.apache.maven.model.Dependency[]</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="environmentVariables">environmentVariables</a>:</b></p>
        
<div>Additional environments to set for the forked test JVM.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.Map</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="excludedGroups">excludedGroups</a>:</b></p>
        
<div>(junit47 provider with JUnit4.8+ only) Excluded groups/categories
(comma-separated). Any methods/classes/etc with one of the
groups/categories specified in this list will specifically not be
run. For JUnit, this parameter forces the use of the junit47
provider</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>excludedGroups</tt></li>
        </ul><hr />
<p><b><a name="excludes">excludes</a>:</b></p>
        
<div>List of patterns (separated by commas) used to specify the tests
that should be excluded in testing. When not specified and when the
<tt>test</tt> parameter is not specified, the default excludes
will be <tt>**/*$*</tt> (which excludes all inner classes).</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.List</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="explodedBundles">explodedBundles</a>:</b></p>
        
<div>List of bundles that must be expanded in order to execute the
tests. Ignored if <tt>testRuntime</tt> is
<tt>p2Installed</tt>.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String[]</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="failIfNoTests">failIfNoTests</a>:</b></p>
        
<div>If set to &quot;false&quot; the test execution will not fail in case there
are no tests found.</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>failIfNoTests</tt></li>
          
<li><b>Default</b>: <tt>true</tt></li>
        </ul><hr />
<p><b><a name="forkedProcessTimeoutInSeconds">forkedProcessTimeoutInSeconds</a>:</b></p>
        
<div>Kill the forked test process after a certain number of seconds. If
set to 0, wait forever for the process, never timing out.</div>
        
<ul>
          
<li><b>Type</b>: <tt>int</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>surefire.timeout</tt></li>
        </ul><hr />
<p><b><a name="frameworkExtensions">frameworkExtensions</a>:</b></p>
        
<div>List of framework extension bundles to add. Note: The goal does not
automatically detect which bundles in the test runtime are
framework extensions, but they have to be explicitly specified
using this parameter. Ignored if <tt>testRuntime</tt> is
<tt>p2Installed</tt>.</div>
        
<ul>
          
<li><b>Type</b>: <tt>org.apache.maven.model.Dependency[]</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="groups">groups</a>:</b></p>
        
<div>(junit47 provider with JUnit4.8+ only) Groups/categories for this
test (comma-separated). Only classes/methods/etc decorated with one
of the group/category specified here will be included in test run,
if specified. For JUnit, this parameter forces the use of the
junit47 provider</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>groups</tt></li>
        </ul><hr />
<p><b><a name="includes">includes</a>:</b></p>
        
<div>List of patterns (separated by commas) used to specify the tests
that should be included in testing. When not specified and whent
the <tt>test</tt> parameter is not specified, the default
includes will be <tt>**/Test*.java **/*Test.java
**/*TestCase.java</tt></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.List</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="osgiDataDirectory">osgiDataDirectory</a>:</b></p>
        
<div><a class="externalLink" href="http://help.eclipse.org/juno/topic/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html#osgiinstancearea">OSGi
data directory</a> (<tt>osgi.instance.area</tt>, aka the
workspace) of the Equinox runtime used to execute tests.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${project.build.directory}/work/data/</tt></li>
        </ul><hr />
<p><b><a name="parallel">parallel</a>:</b></p>
        
<div>(JUnit 4.7 provider) Supports values &quot;classes&quot;/&quot;methods&quot;/&quot;both&quot; to
run in separate threads, as controlled by threadCount.</div>
        
<ul>
          
<li><b>Type</b>: <tt>org.eclipse.tycho.surefire.ParallelMode</tt></li>
          
<li><b>Since</b>: <tt>0.16.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>parallel</tt></li>
        </ul><hr />
<p><b><a name="perCoreThreadCount">perCoreThreadCount</a>:</b></p>
        
<div>(JUnit 4.7 provider) Indicates that threadCount is per cpu core.</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Since</b>: <tt>0.16.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>perCoreThreadCount</tt></li>
          
<li><b>Default</b>: <tt>true</tt></li>
        </ul><hr />
<p><b><a name="pluginArtifacts">pluginArtifacts</a>:</b></p>
        
<div>(no description)</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.List</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>plugin.artifacts</tt></li>
        </ul><hr />
<p><b><a name="product">product</a>:</b></p>
        
<div>Eclipse product to be run, i.e. -product parameter passed to test
Eclipse runtime.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="profileName">profileName</a>:</b></p>
        
<div>p2 <a class="externalLink" href="http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fp2_director.html">profile</a>
name of the installation under test. Only relevant if
<tt>testRuntime</tt> is <tt>p2Installed</tt>. If tests are
installed on top of an already existing installation in
<tt>work</tt>, this must match the name of the existing
profile.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Since</b>: <tt>0.19.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>DefaultProfile</tt></li>
        </ul><hr />
<p><b><a name="providerHint">providerHint</a>:</b></p>
        
<div>Normally tycho will automatically determine the test framework
provider based on the test project's classpath. Use this to force
using a test framework provider implementation with the given role
hint. Tycho comes with providers &quot;junit3&quot;,&quot;junit4&quot;,&quot;junit47&quot;. Note
that when specifying a providerHint, you have to make sure the
provider is actually available in the dependencies of
tycho-surefire-plugin.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Since</b>: <tt>0.16.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="providerProperties">providerProperties</a>:</b></p>
        
<div>Use this to specify surefire provider-specific properties.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.Properties</tt></li>
          
<li><b>Since</b>: <tt>0.16.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="redirectTestOutputToFile">redirectTestOutputToFile</a>:</b></p>
        
<div>Set this to &quot;true&quot; to redirect the unit test standard output to a
file (found in reportsDirectory/testName-output.txt).</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>maven.test.redirectTestOutputToFile</tt></li>
          
<li><b>Default</b>: <tt>false</tt></li>
        </ul><hr />
<p><b><a name="reportsDirectory">reportsDirectory</a>:</b></p>
        
<div>Base directory where all reports are written to.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${project.build.directory}/surefire-reports</tt></li>
        </ul><hr />
<p><b><a name="rerunFailingTestsCount">rerunFailingTestsCount</a>:</b></p>
        
<div>Flaky tests will re-run until they pass or the number of reruns has
been exhausted. See surefire documentation for details. 

<p>Note: This feature is supported only for JUnit 4.x</p></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.Integer</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>surefire.rerunFailingTestsCount</tt></li>
          
<li><b>Default</b>: <tt>0</tt></li>
        </ul><hr />
<p><b><a name="runOrder">runOrder</a>:</b></p>
        
<div>Defines the order the tests will be run in. Supported values are
&quot;alphabetical&quot;, &quot;reversealphabetical&quot;, &quot;random&quot;, &quot;hourly&quot;
(alphabetical on even hours, reverse alphabetical on odd hours) and
&quot;filesystem&quot;.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Since</b>: <tt>0.19.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>filesystem</tt></li>
        </ul><hr />
<p><b><a name="showEclipseLog">showEclipseLog</a>:</b></p>
        
<div>Enables -debug -consolelog for the test OSGi runtime</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>tycho.showEclipseLog</tt></li>
          
<li><b>Default</b>: <tt>false</tt></li>
        </ul><hr />
<p><b><a name="skip">skip</a>:</b></p>
        
<div>Same as <tt>skipTests</tt></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.Boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>maven.test.skip</tt></li>
        </ul><hr />
<p><b><a name="skipAfterFailureCount">skipAfterFailureCount</a>:</b></p>
        
<div>Skips the remaining tests after the Nth failure or error. See
surefire documentation for details.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.Integer</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>surefire.skipAfterFailureCount</tt></li>
          
<li><b>Default</b>: <tt>0</tt></li>
        </ul><hr />
<p><b><a name="skipExec">skipExec</a>:</b></p>
        
<div><b>Deprecated.</b> Use skipTests instead.</div>
        
<div>(no description)</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>maven.test.skipExec</tt></li>
        </ul><hr />
<p><b><a name="skipTests">skipTests</a>:</b></p>
        
<div>Set this to &quot;true&quot; to skip running tests, but still compile them.
Its use is NOT RECOMMENDED, but quite convenient on occasion.
Default: <tt>false</tt></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.Boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>skipTests</tt></li>
        </ul><hr />
<p><b><a name="suiteXmlFiles">suiteXmlFiles</a>:</b></p>
        
<div>Only supported by the TestNG test provider. The values specified
are passed to TestNG as test suite files. The suite files will
overwrite the <tt>includes</tt> and <tt>excludes</tt>
patterns. The path to the suite file(s) could be relative (test
bundle classpath) or an absolute path to xml files outside the test
bundle. 

<div>
<pre>
&lt;configuration&gt;
  &lt;suiteXmlFiles&gt;
    &lt;suiteXmlFile&gt;myTestSuite.xml&lt;/suiteXmlFile&gt;
  &lt;/suiteXmlFiles&gt;
&lt;/configuration&gt;
</pre></div></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.List</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="surefireProperties">surefireProperties</a>:</b></p>
        
<div>(no description)</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${project.build.directory}/surefire.properties</tt></li>
        </ul><hr />
<p><b><a name="systemProperties">systemProperties</a>:</b></p>
        
<div>Additional system properties to set for the forked test JVM.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.util.Map</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
        </ul><hr />
<p><b><a name="test">test</a>:</b></p>
        
<div>Specify this parameter if you want to use the test pattern matching
notation, Ant pattern matching, to select tests to run. The Ant
pattern will be used to create an include pattern formatted like
<tt>**/${test}.java</tt> When used, the <tt>includes</tt>
and <tt>excludes</tt> patterns parameters are ignored</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>test</tt></li>
        </ul><hr />
<p><b><a name="testClass">testClass</a>:</b></p>
        
<div>Identifies a single test (suite) class to run. This is useful if
you have a single JUnit test suite class defining which tests
should be executed. Will be ignored if <tt>test</tt> is
specified. Example: 

<div>
<pre>
&lt;testClass&gt;foo.bar.FooTest&lt;/testClass&gt;
</pre></div></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>testClass</tt></li>
        </ul><hr />
<p><b><a name="testClassesDirectory">testClassesDirectory</a>:</b></p>
        
<div>The directory containing generated test classes of the project
being tested.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>project.build.outputDirectory</tt></li>
        </ul><hr />
<p><b><a name="testFailureIgnore">testFailureIgnore</a>:</b></p>
        
<div>Set this to true to ignore a failure during testing. Its use is NOT
RECOMMENDED, but quite convenient on occasion.</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>maven.test.failure.ignore</tt></li>
          
<li><b>Default</b>: <tt>false</tt></li>
        </ul><hr />
<p><b><a name="testRuntime">testRuntime</a>:</b></p>
        
<div>How to create the OSGi test runtime. Allowed values are
<tt>default</tt> and <tt>p2Installed</tt>. Mode
<tt>p2Installed</tt> is <b>EXPERIMENTAL</b> - only works when
installing products under test (see below). 

<ul>

<li>In <tt>default</tt> mode, all necessary files to define the
test runtime like <tt>config.ini</tt> are generated by tycho. This
installation mode has the advantage that the test runtime is
minimal (defined by the transitive dependencies of the test bundle
plus and the test harness) and existing bundle jars are referenced
rather than copied for the installation</li>

<li>In <tt>p2Installed</tt> mode, use p2 director to install
test bundle, test harness bundles and respective dependencies. This
installation mode can be used for integration tests that require a
fully p2-provisioned installation. To install a product IU, add it
as extra requirement to the test bundle (see example below). Note
that this installation mode comes with a certain performance
overhead for executing the provisioning operations otherwise not
required.</li>
</ul>
Example configuration which will install product IU under test
&quot;example.product.id&quot; using p2: 

<div>
<pre>
&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
   &lt;artifactId&gt;tycho-surefire-plugin&lt;/artifactId&gt;
   &lt;version&gt;${tycho-version}&lt;/version&gt;
   &lt;configuration&gt;
      &lt;testRuntime&gt;p2Installed&lt;/testRuntime&gt;
   &lt;/configuration&gt;
&lt;/plugin&gt;
&lt;plugin&gt;
   &lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
   &lt;artifactId&gt;target-platform-configuration&lt;/artifactId&gt;
   &lt;version&gt;${tycho-version}&lt;/version&gt;
   &lt;configuration&gt;
      &lt;dependency-resolution&gt;
         &lt;extraRequirements&gt;
            &lt;!-- product IU under test --&gt;
            &lt;requirement&gt;
               &lt;type&gt;p2-installable-unit&lt;/type&gt;
               &lt;id&gt;example.product.id&lt;/id&gt;
               &lt;versionRange&gt;0.0.0&lt;/versionRange&gt;
            &lt;/requirement&gt;
         &lt;/extraRequirements&gt;
      &lt;/dependency-resolution&gt;
   &lt;/configuration&gt;
&lt;/plugin&gt;
</pre></div></div>
        
<ul>
          
<li><b>Type</b>: <tt>java.lang.String</tt></li>
          
<li><b>Since</b>: <tt>0.19.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>default</tt></li>
        </ul><hr />
<p><b><a name="threadCount">threadCount</a>:</b></p>
        
<div>(JUnit 4.7 provider) The attribute thread-count allows you to
specify how many threads should be allocated for this execution.
Only makes sense to use in conjunction with the parallel parameter.</div>
        
<ul>
          
<li><b>Type</b>: <tt>int</tt></li>
          
<li><b>Since</b>: <tt>0.16.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>threadCount</tt></li>
        </ul><hr />
<p><b><a name="useJDK">useJDK</a>:</b></p>
        
<div>Which JDK to use for executing tests. Possible values are:
<tt>SYSTEM</tt>, <tt>BREE</tt> . 

<ul>

<li>SYSTEM: Use the currently running JVM (or from <a class="externalLink" href="http://maven.apache.org/guides/mini/guide-using-toolchains.html">toolchain</a>
if configured in pom.xml)</li>

<li>BREE: use MANIFEST header
<tt>Bundle-RequiredExecutionEnvironment</tt> to lookup the JDK
from <a class="externalLink" href="http://maven.apache.org/guides/mini/guide-using-toolchains.html">toolchains.xml</a>.
The value of BREE will be matched against the id of the toolchain
elements in toolchains.xml.</li>
</ul>
Example for BREE: <br />
In <tt>META-INF/MANIFEST.MF</tt>: 

<div>
<pre>
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
</pre></div>

In toolchains.xml: 

<div>
<pre>
&lt;toolchains&gt;
   &lt;toolchain&gt;
      &lt;type&gt;jdk&lt;/type&gt;
      &lt;provides&gt;
         &lt;id&gt;JavaSE-1.7&lt;/id&gt;
      &lt;/provides&gt;
      &lt;configuration&gt;
         &lt;jdkHome&gt;/path/to/jdk/1.7&lt;/jdkHome&gt;
      &lt;/configuration&gt;
   &lt;/toolchain&gt;
&lt;/toolchains&gt;
</pre></div></div>
        
<ul>
          
<li><b>Type</b>: <tt>org.eclipse.tycho.core.maven.ToolchainProvider$JDKUsage</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>SYSTEM</tt></li>
        </ul><hr />
<p><b><a name="useUIHarness">useUIHarness</a>:</b></p>
        
<div>Run tests using UI (true) or headless (false) test harness.</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>false</tt></li>
        </ul><hr />
<p><b><a name="useUIThread">useUIThread</a>:</b></p>
        
<div>Run tests in UI (true) or background (false) thread. Only applies
to UI test harness.</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>true</tt></li>
        </ul><hr />
<p><b><a name="useUnlimitedThreads">useUnlimitedThreads</a>:</b></p>
        
<div>(JUnit 4.7 provider) Indicates that the thread pool will be
unlimited. The parallel parameter and the actual number of
classes/methods will decide. Setting this to &quot;true&quot; effectively
disables perCoreThreadCount and threadCount.</div>
        
<ul>
          
<li><b>Type</b>: <tt>boolean</tt></li>
          
<li><b>Since</b>: <tt>0.16.0</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>User Property</b>: <tt>useUnlimitedThreads</tt></li>
          
<li><b>Default</b>: <tt>false</tt></li>
        </ul><hr />
<p><b><a name="work">work</a>:</b></p>
        
<div>Root directory (<a class="externalLink" href="http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html#osgiinstallarea">osgi.install.area</a>)
of the Equinox runtime used to execute tests.</div>
        
<ul>
          
<li><b>Type</b>: <tt>java.io.File</tt></li>
          
<li><b>Required</b>: <tt>No</tt></li>
          
<li><b>Default</b>: <tt>${project.build.directory}/work</tt></li>
        </ul>
      </div>
    </div>
  

                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
              <div class="row span12">Copyright &copy;                    2008-2018
                        <a href="http://www.eclipse.org/">Eclipse Foundation</a>.
            All Rights Reserved.      
                    
      </div>

        
        
                </div>
    </footer>
  </body>
</html>
