TomEE Maven Plugin and integration tests (without arquillian)


Arquillian is great but some apps would prefer to use maven failsafe plugin to do their integration tests. If all your tests are client tests you can simply start the container and deploy the app before the tests are executed (pre-integration-test phase) and undeploy/stop the container after the test (post-integration-test phase). If it is not you can still write a servlet to execute the tests on the server side…wait, you are redoing Arquillian so maybe something is wrong in this case ;).

It is generally complicated/long to configure because you need to find how to start your container then to deploy an application on it etc…boring.

The solution is quite easy if you want to test against TomEE: the tomee maven plugin of course!

It supports start/stop/deploy/undeploy goals but you generally don’t need all of them. All you need if you are writing your integration tests in the application module is to start the container (it will deploy automatically the app) and stop it.

The last important point is to be sure to wait the container is started before running tests (by default start goal is asynchronous). To do so, simply set to true checkStarted attribute.

Here is a sample:

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.superbiz</groupId>
  <artifactId>demoit</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <!-- your dependencies, properties ... -->

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.13</version>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.openejb.maven</groupId>
        <artifactId>tomee-maven-plugin</artifactId>
        <version>1.6.0-SNAPSHOT</version>
        <executions>
          <execution>
            <id>start</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>start</goal>
            </goals>
            <configuration>
              <checkStarted>true</checkStarted>
            </configuration>
          </execution>
          <execution>
            <id>stop</id>
            <phase>post-integration-test</phase>
            <goals>
              <goal>stop</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <simpleLog>true</simpleLog>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
Advertisement

2 thoughts on “TomEE Maven Plugin and integration tests (without arquillian)

  1. Paulaul

    1.6.0 version of the tomee maven plugin has a bug (fixed in trunk) that prevent tomee to stop gracefully.
    You have to add to the plugin configuration to work around the bug.

    Reply
  2. Paul

    Damn, the config snippet to add is : <classpath></classpath>

    Used html entities this time, hope it will be accepted.

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s