Testing Bundles / Plugins with Tycho
There are different ways to test bundles / plug-ins with Tycho:
maven-surefire-plugin
Using maven-surefire-plugin is the preferred way whenever you want to write a plain unit-test. This is a unit test that either:
- don't need a OSGi runtime
 - use some kind of mocking technique for OSGi (e.g. Apache Sling OSGi Mocks)
 - or starts an embedded OSGi Framework (e.g. osgi-test-framework).
 
This requires:
- setting up your project using a test-source folder (see below), alternatively using the standard maven layout
 - an configured execution of the 
maven-surefire-plugin:testgoal - packaging 
eclipse-pluginis used 
A sample snippet looks like this:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	...
	<build>
		...
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-surefire-plugin</artifactId>
			<version>${surefire-plugin-version}</version>
			<executions>
				<execution>
					<id>execute-tests</id>
					<goals>
						<goal>test</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
 	</build>
 </project>
To execute the tests, one has to invoke maven with mvn test.
The following demo projects are provided as an example:
- Project with a configured source folder: https://github.com/eclipse-tycho/tycho/tree/master/demo/testing/surefire/with-source-folder
 - Project using maven standard layout: https://github.com/eclipse-tycho/tycho/tree/master/demo/testing/surefire/with-maven-layout
 
tycho-surefire-plugin
The tycho-surefire-plugin is the preferred whenever you want to write tests that require an OSGi Framework running and is executed in the integration-test phase of your build, this is similar to what PDE offers as Plugin Tests.
There are two ways to use this:
- You use the 
eclipse-test-pluginpackaging, and with those your plugin must only contain test-classes and they will be executed automatically as part of the integration-test phase of your build. This approach is not recommended for new designs. - You use 
eclipse-pluginpackaging and configure an additional execution of thetycho-surefire-plugin:plugin-testgoal with either a test-source folder (see below), alternatively using the standard maven layout. 
A sample snippet looks like this:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	...
	<build>
		...
		<plugin>
			<groupId>org.eclipse.tycho</groupId>
			<artifactId>tycho-surefire-plugin</artifactId>
			<version>${tycho-version}</version>
			<executions>
				<execution>
					<id>execute-integration-tests</id>
					<goals>
						<goal>plugin-test</goal>
						<goal>verify</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
 	</build>
 </project>
To execute the tests, one must invoke maven with mvn verify, the following demo projects are provided as an example:
- Project with a configured source folder as a standalone project similar to the discouraged 
eclipse-test-pluginpackaging: https://github.com/eclipse-tycho/tycho/tree/master/demo/testing/tycho/standalone - Project using maven standard layout having the tests in the same module: https://github.com/eclipse-tycho/tycho/tree/master/demo/testing/tycho/samemodule
 
bnd-testing
The tycho-surefire-plugin has also support for bnd-testing,
this is like plugin-test but uses the BND testing framework. There is currently no JDT/PDE equivalent but this integrates nicely with the OSGi Testing Support and allows to execute prebuild test-bundles.
A sample snippet looks like this:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	...
	<build>
		...
		<plugin>
			<groupId>org.eclipse.tycho</groupId>
			<artifactId>tycho-surefire-plugin</artifactId>
			<version>${tycho-version}</version>
			<executions>
				<execution>
					<id>execute-integration-tests</id>
					<goals>
						<goal>bnd-test</goal>
						<goal>verify</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
 	</build>
 </project>
To execute the tests, one has to invoke maven with mvn verify, the following demo projects are provided as an example:
- 
Project with maven standard layout having the tests in the same module and using OSGi JUnit5 annotations to automatically inject services:
 - 
https://github.com/eclipse-tycho/tycho/tree/master/demo/testing/bnd/osgi-test
 
