| = Meecrowave Testing |
| :jbake-date: 2016-10-24 |
| :jbake-type: page |
| :jbake-status: published |
| :jbake-meecrowavepdf: |
| :jbake-meecrowavetitleicon: icon icon_puzzle_alt |
| :jbake-meecrowavecolor: body-blue |
| :icons: font |
| |
| == JUnit |
| |
| Coordinates: |
| |
| [source,xml] |
| ---- |
| <dependency> |
| <groupId>org.apache.meecrowave</groupId> |
| <artifactId>meecrowave-junit</artifactId> |
| <version>${meecrowave.version}</version> |
| <scope>test</scope> |
| </dependency> |
| ---- |
| |
| === Rules and Runners |
| |
| Meecrowave provides two flavors of JUnit integration: standalone or runners/rules. The standalone one will |
| ensure there is a single container for the whole JVM. It also fits standalone environments where you want to control the lifecycle. |
| The other one will follow the JUnit lifecycle (per class or test rule). |
| |
| Here how to use the standalone flavor: |
| |
| [source,java] |
| ---- |
| @RunWith(MonoMeecrowave.Runner.class) |
| public class MonoMeecrowaveRuleTest { |
| /* or |
| @ClassRule |
| public static final MonoMeecrowave.Rule RULE = new MonoMeecrowave.Rule(); |
| */ |
| |
| @MonoMeecrowave.Runner.ConfigurationInject |
| private Meecrowave.Builder config; |
| |
| @Test |
| public void test() throws IOException { |
| // use "http://localhost:" + config.getHttpPort() |
| } |
| } |
| ---- |
| |
| When using the standalone, `@MonoMeecrowave.Runner.ConfigurationInject` allows to still |
| access the configuration and random HTTP port. |
| |
| For the configuration, the standalone runner will use a global configuration shared by all tests. To load it |
| it will use a standard `ServiceLoader` on type `org.apache.meecrowave.Meecrowave$ConfigurationCustomizer`. |
| |
| And here is the one bound to the JUnit lifecycle |
| |
| [source,java] |
| ---- |
| public class MeecrowaveRuleTest { |
| @ClassRule // started once for the class, @Rule would be per method |
| public static final MeecrowaveRule RULE = new MeecrowaveRule(); |
| |
| @Test |
| public void test() throws IOException { |
| // use "http://localhost:" + RULE.getConfiguration().getHttpPort() |
| } |
| } |
| ---- |
| |
| As usual with JUnit rules, you can decide whereas the Meecrowave instance is bound to the entire test class |
| or a method by using @ClassRule or @Rule. |
| |
| === JUnit 5 |
| |
| JUnit 5 integrates a new `Extension` system. It is not yet very well supported by IDEs but you can already use it with |
| Gradle and Maven (see http://junit.org/junit5/docs/current/user-guide/#running-tests). |
| |
| The usage has two annotations: `@MeecrowaveConfig` which remaps most of the configuration of Meecrowave and `@MonoMeecrowaveConfig` |
| which is close to `MonoMeecrowave.Runner` in term of usage. |
| |
| [source,java] |
| ---- |
| @MeecrowaveConfig /*(some config)*/ |
| public class MeecrowaveConfigTest { |
| @ConfigurationInject |
| private Meecrowave.Builder config; |
| |
| @Test |
| public void run() throws MalformedURLException { |
| final String base = "http://localhost:" + config.getHttpPort(); |
| // asserts |
| } |
| } |
| ---- |
| |
| Or |
| |
| [source,java] |
| ---- |
| @MonoMeecrowaveConfig |
| public class MeecrowaveConfigTest { |
| // ... |
| } |
| ---- |
| |
| TIP: JUnit 5 integration provides an `@AfterFirstInjection` method and `@AfterLastTest` |
| which can be used to setup/reset some environment using injections once for a set of test methods. |
| The methods must not have any parameter. |
| |
| == Arquillian Container |
| |
| Container dependency: |
| |
| [source,xml] |
| ---- |
| <dependency> |
| <groupId>org.apache.meecrowave</groupId> |
| <artifactId>meecrowave-arquillian</artifactId> |
| <version>${meecrowave.version}</version> |
| <scope>test</scope> |
| </dependency> |
| ---- |
| |
| For the configuration check link:{context_rootpath}/meecrowave-core/configuration.html[Core configuration]. |
| |
| Here is a sample: |
| |
| [source,xml] |
| ---- |
| include::../../../../../target/generated-doc/ArquillianConfiguration.adoc[] |
| ---- |