<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.9.1 from target/generated-site/xdoc/test-mojo.xml at 2019-11-14
 | Rendered using Apache Maven Fluido Skin 1.8
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="generator" content="Apache Maven Doxia Site Renderer 1.9.1" />
    <title>Tycho Surefire Plugin &#x2013; tycho-surefire:test</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />
    <script src="./js/apache-maven-fluido-1.8.min.js"></script>
  </head>
  <body class="topBarDisabled">
    <div class="container-fluid">
      <header>
        <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: 2019-11-14<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.5.1-SNAPSHOT</li>
          </ul>
        </div>
      </header>
      <div class="row-fluid">
        <header id="leftColumn" class="span2">
          <nav class="well sidebar-nav">
  <ul class="nav nav-list">
   <li class="nav-header">Tycho</li>
    <li><a href="../index.html" title="Introduction"><span class="none"></span>Introduction</a></li>
    <li><a href="../tycho-compiler-plugin/plugin-info.html" title="Compiler Plugin"><span class="none"></span>Compiler Plugin</a></li>
    <li><a href="../tycho-packaging-plugin/plugin-info.html" title="Packaging Plugin"><span class="none"></span>Packaging Plugin</a></li>
    <li><a href="../BuildProperties.html" title="Build Properties"><span class="none"></span>Build Properties</a></li>
    <li><a href="../tycho-surefire-plugin/plugin-info.html" title="Surefire Plugin"><span class="none"></span>Surefire Plugin</a></li>
    <li><a href="../tycho-p2/tycho-p2-publisher-plugin/plugin-info.html" title="p2 Publisher Plugin"><span class="none"></span>p2 Publisher Plugin</a></li>
    <li><a href="../tycho-p2/tycho-p2-repository-plugin/plugin-info.html" title="p2 Repository Plugin"><span class="none"></span>p2 Repository Plugin</a></li>
    <li><a href="../tycho-p2/tycho-p2-director-plugin/plugin-info.html" title="p2 Director Plugin"><span class="none"></span>p2 Director Plugin</a></li>
    <li><a href="../tycho-source-plugin/plugin-info.html" title="Source Plugin"><span class="none"></span>Source Plugin</a></li>
    <li><a href="../tycho-release/tycho-versions-plugin/plugin-info.html" title="Versions Plugin"><span class="none"></span>Versions Plugin</a></li>
    <li><a href="../tycho-pomgenerator-plugin/plugin-info.html" title="POM Generator Plugin"><span class="none"></span>POM Generator Plugin</a></li>
    <li><a href="../TychoProperties.html" title="Tycho Properties"><span class="none"></span>Tycho Properties</a></li>
  </ul>
          </nav>
          <div class="well sidebar-nav">
            <hr />
            <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>
        </header>
        <main id="bodyColumn"  class="span10" >

  
    <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.5.1-SNAPSHOT: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.
org.eclipse.equinox.ds to make declarative services work),
they need to be added manually through an
extraRequirements configuration on the
target-platform-configuration 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: runtime.</li>
        
<li>Binds by default to the <a class="externalLink" href="http://maven.apache.org/ref/current/maven-core/lifecycles.html">lifecycle phase</a>: integration-test.</li>
      </ul>
      <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><a href="#appArgLine">&lt;appArgLine&gt;</a></td>
            
<td>String</td>
            
<td>-</td>
            
<td>Arbitrary applications arguments to set on the command line.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#application">&lt;application&gt;</a></td>
            
<td>String</td>
            
<td>-</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><a href="#argLine">&lt;argLine&gt;</a></td>
            
<td>String</td>
            
<td>-</td>
            
<td>Arbitrary JVM options to set on the command line.<br /><b>User property is</b>: tycho.testArgLine.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#bundleStartLevel">&lt;bundleStartLevel&gt;</a></td>
            
<td>BundleStartLevel[]</td>
            
<td>-</td>
            
<td>Bundle start level and auto start configuration used by the test
runtime. Ignored if testRuntime is
p2Installed. 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><a href="#debugPort">&lt;debugPort&gt;</a></td>
            
<td>int</td>
            
<td>-</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>: debugPort.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#defaultStartLevel">&lt;defaultStartLevel&gt;</a></td>
            
<td>BundleStartLevel</td>
            
<td>-</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 bundleStartLevel. Ignored if
testRuntime is p2Installed. 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><a href="#deleteOsgiDataDirectory">&lt;deleteOsgiDataDirectory&gt;</a></td>
            
<td>boolean</td>
            
<td>-</td>
            
<td>Whether to recursively delete the directory
osgiDataDirectory before running the tests.<br /><b>Default value is</b>: true.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#dependencies">&lt;dependencies&gt;</a></td>
            
<td>Dependency[]</td>
            
<td>-</td>
            
<td>Additional dependencies to be added to the test runtime. Ignored if
testRuntime is p2Installed. Note: This
parameter has only limited support for dependencies to artifacts
within the reactor. Therefore it is recommended to specify
extraRequirements on the
target-platform-configuration 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 extraRequirements are -
together with the dependencies specified in the
MANIFEST.MF 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><a href="#enableAssertions">&lt;enableAssertions&gt;</a></td>
            
<td>boolean</td>
            
<td>1.5.0</td>
            
<td>By default, Tycho Surefire disables JVM assertions for the
execution of your test cases. To enable the assertions, set this
flag to &quot;true&quot;.<br /><b>Default value is</b>: false.<br /><b>User property is</b>: enableAssertions.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#environmentVariables">&lt;environmentVariables&gt;</a></td>
            
<td>Map</td>
            
<td>-</td>
            
<td>Additional environments to set for the forked test JVM.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#excludedGroups">&lt;excludedGroups&gt;</a></td>
            
<td>String</td>
            
<td>-</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>: excludedGroups.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#excludes">&lt;excludes&gt;</a></td>
            
<td>List</td>
            
<td>-</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
test parameter is not specified, the default excludes
will be **/*$* (which excludes all inner classes).<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#explodedBundles">&lt;explodedBundles&gt;</a></td>
            
<td>String[]</td>
            
<td>-</td>
            
<td>List of bundles that must be expanded in order to execute the
tests. Ignored if testRuntime is
p2Installed.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#failIfNoTests">&lt;failIfNoTests&gt;</a></td>
            
<td>boolean</td>
            
<td>-</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>: true.<br /><b>User property is</b>: failIfNoTests.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#forkedProcessTimeoutInSeconds">&lt;forkedProcessTimeoutInSeconds&gt;</a></td>
            
<td>int</td>
            
<td>-</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>: surefire.timeout.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#frameworkExtensions">&lt;frameworkExtensions&gt;</a></td>
            
<td>Dependency[]</td>
            
<td>-</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 testRuntime is
p2Installed.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#groups">&lt;groups&gt;</a></td>
            
<td>String</td>
            
<td>-</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>: groups.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#includes">&lt;includes&gt;</a></td>
            
<td>List</td>
            
<td>-</td>
            
<td>List of patterns (separated by commas) used to specify the tests
that should be included in testing. When not specified and when the
test parameter is not specified, the default includes
will be **/Test*.java **/*Test.java **/*TestCase.java<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#osgiDataDirectory">&lt;osgiDataDirectory&gt;</a></td>
            
<td>File</td>
            
<td>-</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> (osgi.instance.area, aka the
workspace) of the Equinox runtime used to execute tests.<br /><b>Default value is</b>: ${project.build.directory}/work/data/.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#parallel">&lt;parallel&gt;</a></td>
            
<td>ParallelMode</td>
            
<td>0.16.0</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>: parallel.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#perCoreThreadCount">&lt;perCoreThreadCount&gt;</a></td>
            
<td>boolean</td>
            
<td>0.16.0</td>
            
<td>(JUnit 4.7 provider) Indicates that threadCount is per cpu core.<br /><b>Default value is</b>: true.<br /><b>User property is</b>: perCoreThreadCount.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#pluginArtifacts">&lt;pluginArtifacts&gt;</a></td>
            
<td>List</td>
            
<td>-</td>
            
<td>(no description)<br /><b>User property is</b>: plugin.artifacts.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#product">&lt;product&gt;</a></td>
            
<td>String</td>
            
<td>-</td>
            
<td>Eclipse product to be run, i.e. -product parameter passed to test
Eclipse runtime.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#profileName">&lt;profileName&gt;</a></td>
            
<td>String</td>
            
<td>0.19.0</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
testRuntime is p2Installed. If tests are
installed on top of an already existing installation in
work, this must match the name of the existing
profile.<br /><b>Default value is</b>: DefaultProfile.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#providerHint">&lt;providerHint&gt;</a></td>
            
<td>String</td>
            
<td>0.16.0</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="a">
            
<td><a href="#providerProperties">&lt;providerProperties&gt;</a></td>
            
<td>Properties</td>
            
<td>0.16.0</td>
            
<td>Use this to specify surefire provider-specific properties.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#redirectTestOutputToFile">&lt;redirectTestOutputToFile&gt;</a></td>
            
<td>boolean</td>
            
<td>-</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>: false.<br /><b>User property is</b>: maven.test.redirectTestOutputToFile.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#reportsDirectory">&lt;reportsDirectory&gt;</a></td>
            
<td>File</td>
            
<td>-</td>
            
<td>Base directory where all reports are written to.<br /><b>Default value is</b>: ${project.build.directory}/surefire-reports.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#rerunFailingTestsCount">&lt;rerunFailingTestsCount&gt;</a></td>
            
<td>Integer</td>
            
<td>-</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>: 0.<br /><b>User property is</b>: surefire.rerunFailingTestsCount.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#runOrder">&lt;runOrder&gt;</a></td>
            
<td>String</td>
            
<td>0.19.0</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>: filesystem.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#showEclipseLog">&lt;showEclipseLog&gt;</a></td>
            
<td>boolean</td>
            
<td>-</td>
            
<td>Enables -debug -consolelog for the test OSGi runtime<br /><b>Default value is</b>: false.<br /><b>User property is</b>: tycho.showEclipseLog.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#skip">&lt;skip&gt;</a></td>
            
<td>Boolean</td>
            
<td>-</td>
            
<td>Same as skipTests<br /><b>User property is</b>: maven.test.skip.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#skipAfterFailureCount">&lt;skipAfterFailureCount&gt;</a></td>
            
<td>Integer</td>
            
<td>-</td>
            
<td>Skips the remaining tests after the Nth failure or error. See
surefire documentation for details.<br /><b>Default value is</b>: 0.<br /><b>User property is</b>: surefire.skipAfterFailureCount.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#skipExec">&lt;skipExec&gt;</a></td>
            
<td>boolean</td>
            
<td>-</td>
            
<td><b>Deprecated.</b> Use skipTests instead.<br /><b>User property is</b>: maven.test.skipExec.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#skipTests">&lt;skipTests&gt;</a></td>
            
<td>Boolean</td>
            
<td>-</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: false<br /><b>User property is</b>: skipTests.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#suiteXmlFiles">&lt;suiteXmlFiles&gt;</a></td>
            
<td>List</td>
            
<td>-</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 includes and excludes
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="b">
            
<td><a href="#surefireProperties">&lt;surefireProperties&gt;</a></td>
            
<td>File</td>
            
<td>-</td>
            
<td>(no description)<br /><b>Default value is</b>: ${project.build.directory}/surefire.properties.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#systemProperties">&lt;systemProperties&gt;</a></td>
            
<td>Map</td>
            
<td>-</td>
            
<td>Additional system properties to set for the forked test JVM.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#test">&lt;test&gt;</a></td>
            
<td>String</td>
            
<td>-</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
**/${test}.java When used, the includes
and excludes patterns parameters are ignored<br /><b>User property is</b>: test.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#testClass">&lt;testClass&gt;</a></td>
            
<td>String</td>
            
<td>-</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 test is
specified. Example: 

<div>
<pre>
&lt;testClass&gt;foo.bar.FooTest&lt;/testClass&gt;
</pre></div><br /><b>User property is</b>: testClass.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#testClassesDirectory">&lt;testClassesDirectory&gt;</a></td>
            
<td>File</td>
            
<td>-</td>
            
<td>The directory containing generated test classes of the project
being tested.<br /><b>User property is</b>: project.build.outputDirectory.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#testFailureIgnore">&lt;testFailureIgnore&gt;</a></td>
            
<td>boolean</td>
            
<td>-</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>: false.<br /><b>User property is</b>: maven.test.failure.ignore.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#testRuntime">&lt;testRuntime&gt;</a></td>
            
<td>String</td>
            
<td>0.19.0</td>
            
<td>How to create the OSGi test runtime. Allowed values are
default and p2Installed. Mode
p2Installed is <b>EXPERIMENTAL</b> - only works when
installing products under test (see below). 

<ul>

<li>In default mode, all necessary files to define the
test runtime like config.ini 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 p2Installed 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>: default.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#threadCount">&lt;threadCount&gt;</a></td>
            
<td>int</td>
            
<td>0.16.0</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>: threadCount.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#trimStackTrace">&lt;trimStackTrace&gt;</a></td>
            
<td>boolean</td>
            
<td>1.3.0</td>
            
<td>When true, stack traces are trimmed to only show lines
within the test.<br /><b>Default value is</b>: true.<br /><b>User property is</b>: trimStackTrace.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#useJDK">&lt;useJDK&gt;</a></td>
            
<td>ToolchainProvider$JDKUsage</td>
            
<td>-</td>
            
<td>Which JDK to use for executing tests. Possible values are:
SYSTEM, BREE . 

<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
Bundle-RequiredExecutionEnvironment 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 META-INF/MANIFEST.MF: 

<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>: SYSTEM.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#useUIHarness">&lt;useUIHarness&gt;</a></td>
            
<td>boolean</td>
            
<td>-</td>
            
<td>Run tests using UI (true) or headless (false) test harness.<br /><b>Default value is</b>: false.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#useUIThread">&lt;useUIThread&gt;</a></td>
            
<td>boolean</td>
            
<td>-</td>
            
<td>Run tests in UI (true) or background (false) thread. Only applies
to UI test harness.<br /><b>Default value is</b>: true.<br /></td>
          </tr>
          
<tr class="b">
            
<td><a href="#useUnlimitedThreads">&lt;useUnlimitedThreads&gt;</a></td>
            
<td>boolean</td>
            
<td>0.16.0</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>: false.<br /><b>User property is</b>: useUnlimitedThreads.<br /></td>
          </tr>
          
<tr class="a">
            
<td><a href="#work">&lt;work&gt;</a></td>
            
<td>File</td>
            
<td>-</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>: ${project.build.directory}/work.<br /></td>
          </tr>
        </table>
      </section>
      <section>
<h3><a name="Parameter_Details"></a>Parameter Details</h3>
        <section>
<h4><a name="a.3CappArgLine.3E"></a><b><a name="appArgLine">&lt;appArgLine&gt;</a></b></h4>
        
<div>Arbitrary applications arguments to set on the command line.</div>
        
<ul>
          
<li><b>Type</b>: java.lang.String</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3Capplication.3E"></a><b><a name="application">&lt;application&gt;</a></b></h4>
        
<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>: java.lang.String</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CargLine.3E"></a><b><a name="argLine">&lt;argLine&gt;</a></b></h4>
        
<div>Arbitrary JVM options to set on the command line.</div>
        
<ul>
          
<li><b>Type</b>: java.lang.String</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: tycho.testArgLine</li>
        </ul><hr /></section><section>
<h4><a name="a.3CbundleStartLevel.3E"></a><b><a name="bundleStartLevel">&lt;bundleStartLevel&gt;</a></b></h4>
        
<div>Bundle start level and auto start configuration used by the test
runtime. Ignored if testRuntime is
p2Installed. 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>: org.eclipse.sisu.equinox.launching.BundleStartLevel[]</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CdebugPort.3E"></a><b><a name="debugPort">&lt;debugPort&gt;</a></b></h4>
        
<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>: int</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: debugPort</li>
        </ul><hr /></section><section>
<h4><a name="a.3CdefaultStartLevel.3E"></a><b><a name="defaultStartLevel">&lt;defaultStartLevel&gt;</a></b></h4>
        
<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 bundleStartLevel. Ignored if
testRuntime is p2Installed. 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>: org.eclipse.sisu.equinox.launching.BundleStartLevel</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CdeleteOsgiDataDirectory.3E"></a><b><a name="deleteOsgiDataDirectory">&lt;deleteOsgiDataDirectory&gt;</a></b></h4>
        
<div>Whether to recursively delete the directory
osgiDataDirectory before running the tests.</div>
        
<ul>
          
<li><b>Type</b>: boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: true</li>
        </ul><hr /></section><section>
<h4><a name="a.3Cdependencies.3E"></a><b><a name="dependencies">&lt;dependencies&gt;</a></b></h4>
        
<div>Additional dependencies to be added to the test runtime. Ignored if
testRuntime is p2Installed. Note: This
parameter has only limited support for dependencies to artifacts
within the reactor. Therefore it is recommended to specify
extraRequirements on the
target-platform-configuration 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 extraRequirements are -
together with the dependencies specified in the
MANIFEST.MF 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>: org.apache.maven.model.Dependency[]</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CenableAssertions.3E"></a><b><a name="enableAssertions">&lt;enableAssertions&gt;</a></b></h4>
        
<div>By default, Tycho Surefire disables JVM assertions for the
execution of your test cases. To enable the assertions, set this
flag to &quot;true&quot;.</div>
        
<ul>
          
<li><b>Type</b>: boolean</li>
          
<li><b>Since</b>: 1.5.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: enableAssertions</li>
          
<li><b>Default</b>: false</li>
        </ul><hr /></section><section>
<h4><a name="a.3CenvironmentVariables.3E"></a><b><a name="environmentVariables">&lt;environmentVariables&gt;</a></b></h4>
        
<div>Additional environments to set for the forked test JVM.</div>
        
<ul>
          
<li><b>Type</b>: java.util.Map</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CexcludedGroups.3E"></a><b><a name="excludedGroups">&lt;excludedGroups&gt;</a></b></h4>
        
<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>: java.lang.String</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: excludedGroups</li>
        </ul><hr /></section><section>
<h4><a name="a.3Cexcludes.3E"></a><b><a name="excludes">&lt;excludes&gt;</a></b></h4>
        
<div>List of patterns (separated by commas) used to specify the tests
that should be excluded in testing. When not specified and when the
test parameter is not specified, the default excludes
will be **/*$* (which excludes all inner classes).</div>
        
<ul>
          
<li><b>Type</b>: java.util.List</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CexplodedBundles.3E"></a><b><a name="explodedBundles">&lt;explodedBundles&gt;</a></b></h4>
        
<div>List of bundles that must be expanded in order to execute the
tests. Ignored if testRuntime is
p2Installed.</div>
        
<ul>
          
<li><b>Type</b>: java.lang.String[]</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CfailIfNoTests.3E"></a><b><a name="failIfNoTests">&lt;failIfNoTests&gt;</a></b></h4>
        
<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>: boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: failIfNoTests</li>
          
<li><b>Default</b>: true</li>
        </ul><hr /></section><section>
<h4><a name="a.3CforkedProcessTimeoutInSeconds.3E"></a><b><a name="forkedProcessTimeoutInSeconds">&lt;forkedProcessTimeoutInSeconds&gt;</a></b></h4>
        
<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>: int</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: surefire.timeout</li>
        </ul><hr /></section><section>
<h4><a name="a.3CframeworkExtensions.3E"></a><b><a name="frameworkExtensions">&lt;frameworkExtensions&gt;</a></b></h4>
        
<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 testRuntime is
p2Installed.</div>
        
<ul>
          
<li><b>Type</b>: org.apache.maven.model.Dependency[]</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3Cgroups.3E"></a><b><a name="groups">&lt;groups&gt;</a></b></h4>
        
<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>: java.lang.String</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: groups</li>
        </ul><hr /></section><section>
<h4><a name="a.3Cincludes.3E"></a><b><a name="includes">&lt;includes&gt;</a></b></h4>
        
<div>List of patterns (separated by commas) used to specify the tests
that should be included in testing. When not specified and when the
test parameter is not specified, the default includes
will be **/Test*.java **/*Test.java **/*TestCase.java</div>
        
<ul>
          
<li><b>Type</b>: java.util.List</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CosgiDataDirectory.3E"></a><b><a name="osgiDataDirectory">&lt;osgiDataDirectory&gt;</a></b></h4>
        
<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> (osgi.instance.area, aka the
workspace) of the Equinox runtime used to execute tests.</div>
        
<ul>
          
<li><b>Type</b>: java.io.File</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: ${project.build.directory}/work/data/</li>
        </ul><hr /></section><section>
<h4><a name="a.3Cparallel.3E"></a><b><a name="parallel">&lt;parallel&gt;</a></b></h4>
        
<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>: org.eclipse.tycho.surefire.ParallelMode</li>
          
<li><b>Since</b>: 0.16.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: parallel</li>
        </ul><hr /></section><section>
<h4><a name="a.3CperCoreThreadCount.3E"></a><b><a name="perCoreThreadCount">&lt;perCoreThreadCount&gt;</a></b></h4>
        
<div>(JUnit 4.7 provider) Indicates that threadCount is per cpu core.</div>
        
<ul>
          
<li><b>Type</b>: boolean</li>
          
<li><b>Since</b>: 0.16.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: perCoreThreadCount</li>
          
<li><b>Default</b>: true</li>
        </ul><hr /></section><section>
<h4><a name="a.3CpluginArtifacts.3E"></a><b><a name="pluginArtifacts">&lt;pluginArtifacts&gt;</a></b></h4>
        
<div>(no description)</div>
        
<ul>
          
<li><b>Type</b>: java.util.List</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: plugin.artifacts</li>
        </ul><hr /></section><section>
<h4><a name="a.3Cproduct.3E"></a><b><a name="product">&lt;product&gt;</a></b></h4>
        
<div>Eclipse product to be run, i.e. -product parameter passed to test
Eclipse runtime.</div>
        
<ul>
          
<li><b>Type</b>: java.lang.String</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CprofileName.3E"></a><b><a name="profileName">&lt;profileName&gt;</a></b></h4>
        
<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
testRuntime is p2Installed. If tests are
installed on top of an already existing installation in
work, this must match the name of the existing
profile.</div>
        
<ul>
          
<li><b>Type</b>: java.lang.String</li>
          
<li><b>Since</b>: 0.19.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: DefaultProfile</li>
        </ul><hr /></section><section>
<h4><a name="a.3CproviderHint.3E"></a><b><a name="providerHint">&lt;providerHint&gt;</a></b></h4>
        
<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>: java.lang.String</li>
          
<li><b>Since</b>: 0.16.0</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CproviderProperties.3E"></a><b><a name="providerProperties">&lt;providerProperties&gt;</a></b></h4>
        
<div>Use this to specify surefire provider-specific properties.</div>
        
<ul>
          
<li><b>Type</b>: java.util.Properties</li>
          
<li><b>Since</b>: 0.16.0</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CredirectTestOutputToFile.3E"></a><b><a name="redirectTestOutputToFile">&lt;redirectTestOutputToFile&gt;</a></b></h4>
        
<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>: boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: maven.test.redirectTestOutputToFile</li>
          
<li><b>Default</b>: false</li>
        </ul><hr /></section><section>
<h4><a name="a.3CreportsDirectory.3E"></a><b><a name="reportsDirectory">&lt;reportsDirectory&gt;</a></b></h4>
        
<div>Base directory where all reports are written to.</div>
        
<ul>
          
<li><b>Type</b>: java.io.File</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: ${project.build.directory}/surefire-reports</li>
        </ul><hr /></section><section>
<h4><a name="a.3CrerunFailingTestsCount.3E"></a><b><a name="rerunFailingTestsCount">&lt;rerunFailingTestsCount&gt;</a></b></h4>
        
<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>: java.lang.Integer</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: surefire.rerunFailingTestsCount</li>
          
<li><b>Default</b>: 0</li>
        </ul><hr /></section><section>
<h4><a name="a.3CrunOrder.3E"></a><b><a name="runOrder">&lt;runOrder&gt;</a></b></h4>
        
<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>: java.lang.String</li>
          
<li><b>Since</b>: 0.19.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: filesystem</li>
        </ul><hr /></section><section>
<h4><a name="a.3CshowEclipseLog.3E"></a><b><a name="showEclipseLog">&lt;showEclipseLog&gt;</a></b></h4>
        
<div>Enables -debug -consolelog for the test OSGi runtime</div>
        
<ul>
          
<li><b>Type</b>: boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: tycho.showEclipseLog</li>
          
<li><b>Default</b>: false</li>
        </ul><hr /></section><section>
<h4><a name="a.3Cskip.3E"></a><b><a name="skip">&lt;skip&gt;</a></b></h4>
        
<div>Same as skipTests</div>
        
<ul>
          
<li><b>Type</b>: java.lang.Boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: maven.test.skip</li>
        </ul><hr /></section><section>
<h4><a name="a.3CskipAfterFailureCount.3E"></a><b><a name="skipAfterFailureCount">&lt;skipAfterFailureCount&gt;</a></b></h4>
        
<div>Skips the remaining tests after the Nth failure or error. See
surefire documentation for details.</div>
        
<ul>
          
<li><b>Type</b>: java.lang.Integer</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: surefire.skipAfterFailureCount</li>
          
<li><b>Default</b>: 0</li>
        </ul><hr /></section><section>
<h4><a name="a.3CskipExec.3E"></a><b><a name="skipExec">&lt;skipExec&gt;</a></b></h4>
        
<div><b>Deprecated.</b> Use skipTests instead.</div>
        
<div>(no description)</div>
        
<ul>
          
<li><b>Type</b>: boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: maven.test.skipExec</li>
        </ul><hr /></section><section>
<h4><a name="a.3CskipTests.3E"></a><b><a name="skipTests">&lt;skipTests&gt;</a></b></h4>
        
<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: false</div>
        
<ul>
          
<li><b>Type</b>: java.lang.Boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: skipTests</li>
        </ul><hr /></section><section>
<h4><a name="a.3CsuiteXmlFiles.3E"></a><b><a name="suiteXmlFiles">&lt;suiteXmlFiles&gt;</a></b></h4>
        
<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 includes and excludes
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>: java.util.List</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3CsurefireProperties.3E"></a><b><a name="surefireProperties">&lt;surefireProperties&gt;</a></b></h4>
        
<div>(no description)</div>
        
<ul>
          
<li><b>Type</b>: java.io.File</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: ${project.build.directory}/surefire.properties</li>
        </ul><hr /></section><section>
<h4><a name="a.3CsystemProperties.3E"></a><b><a name="systemProperties">&lt;systemProperties&gt;</a></b></h4>
        
<div>Additional system properties to set for the forked test JVM.</div>
        
<ul>
          
<li><b>Type</b>: java.util.Map</li>
          
<li><b>Required</b>: No</li>
        </ul><hr /></section><section>
<h4><a name="a.3Ctest.3E"></a><b><a name="test">&lt;test&gt;</a></b></h4>
        
<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
**/${test}.java When used, the includes
and excludes patterns parameters are ignored</div>
        
<ul>
          
<li><b>Type</b>: java.lang.String</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: test</li>
        </ul><hr /></section><section>
<h4><a name="a.3CtestClass.3E"></a><b><a name="testClass">&lt;testClass&gt;</a></b></h4>
        
<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 test is
specified. Example: 

<div>
<pre>
&lt;testClass&gt;foo.bar.FooTest&lt;/testClass&gt;
</pre></div></div>
        
<ul>
          
<li><b>Type</b>: java.lang.String</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: testClass</li>
        </ul><hr /></section><section>
<h4><a name="a.3CtestClassesDirectory.3E"></a><b><a name="testClassesDirectory">&lt;testClassesDirectory&gt;</a></b></h4>
        
<div>The directory containing generated test classes of the project
being tested.</div>
        
<ul>
          
<li><b>Type</b>: java.io.File</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: project.build.outputDirectory</li>
        </ul><hr /></section><section>
<h4><a name="a.3CtestFailureIgnore.3E"></a><b><a name="testFailureIgnore">&lt;testFailureIgnore&gt;</a></b></h4>
        
<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>: boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: maven.test.failure.ignore</li>
          
<li><b>Default</b>: false</li>
        </ul><hr /></section><section>
<h4><a name="a.3CtestRuntime.3E"></a><b><a name="testRuntime">&lt;testRuntime&gt;</a></b></h4>
        
<div>How to create the OSGi test runtime. Allowed values are
default and p2Installed. Mode
p2Installed is <b>EXPERIMENTAL</b> - only works when
installing products under test (see below). 

<ul>

<li>In default mode, all necessary files to define the
test runtime like config.ini 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 p2Installed 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>: java.lang.String</li>
          
<li><b>Since</b>: 0.19.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: default</li>
        </ul><hr /></section><section>
<h4><a name="a.3CthreadCount.3E"></a><b><a name="threadCount">&lt;threadCount&gt;</a></b></h4>
        
<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>: int</li>
          
<li><b>Since</b>: 0.16.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: threadCount</li>
        </ul><hr /></section><section>
<h4><a name="a.3CtrimStackTrace.3E"></a><b><a name="trimStackTrace">&lt;trimStackTrace&gt;</a></b></h4>
        
<div>When true, stack traces are trimmed to only show lines
within the test.</div>
        
<ul>
          
<li><b>Type</b>: boolean</li>
          
<li><b>Since</b>: 1.3.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: trimStackTrace</li>
          
<li><b>Default</b>: true</li>
        </ul><hr /></section><section>
<h4><a name="a.3CuseJDK.3E"></a><b><a name="useJDK">&lt;useJDK&gt;</a></b></h4>
        
<div>Which JDK to use for executing tests. Possible values are:
SYSTEM, BREE . 

<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
Bundle-RequiredExecutionEnvironment 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 META-INF/MANIFEST.MF: 

<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>: org.eclipse.tycho.core.maven.ToolchainProvider$JDKUsage</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: SYSTEM</li>
        </ul><hr /></section><section>
<h4><a name="a.3CuseUIHarness.3E"></a><b><a name="useUIHarness">&lt;useUIHarness&gt;</a></b></h4>
        
<div>Run tests using UI (true) or headless (false) test harness.</div>
        
<ul>
          
<li><b>Type</b>: boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: false</li>
        </ul><hr /></section><section>
<h4><a name="a.3CuseUIThread.3E"></a><b><a name="useUIThread">&lt;useUIThread&gt;</a></b></h4>
        
<div>Run tests in UI (true) or background (false) thread. Only applies
to UI test harness.</div>
        
<ul>
          
<li><b>Type</b>: boolean</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: true</li>
        </ul><hr /></section><section>
<h4><a name="a.3CuseUnlimitedThreads.3E"></a><b><a name="useUnlimitedThreads">&lt;useUnlimitedThreads&gt;</a></b></h4>
        
<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>: boolean</li>
          
<li><b>Since</b>: 0.16.0</li>
          
<li><b>Required</b>: No</li>
          
<li><b>User Property</b>: useUnlimitedThreads</li>
          
<li><b>Default</b>: false</li>
        </ul><hr /></section><section>
<h4><a name="a.3Cwork.3E"></a><b><a name="work">&lt;work&gt;</a></b></h4>
        
<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>: java.io.File</li>
          
<li><b>Required</b>: No</li>
          
<li><b>Default</b>: ${project.build.directory}/work</li>
        </ul>
      </section></section>
    </section>
  

        </main>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &#169;      2008&#x2013;2019<a href="http://www.eclipse.org/">Eclipse Foundation</a>.
.</p>
        </div>
      </div>
    </footer>
  </body>
</html>
