 ------
 Integration Tests
 ------
 ------
 26 Feb 2009
 ------
~~Licensed to the Apache Software Foundation (ASF) under one
~~or more contributor license agreements.  See the NOTICE file
~~distributed with this work for additional information
~~regarding copyright ownership.  The ASF licenses this file
~~to you under the Apache License, Version 2.0 (the
~~"License"); you may not use this file except in compliance
~~with the License.  You may obtain a copy of the License at
~~
~~    http://www.apache.org/licenses/LICENSE-2.0
~~
~~Unless required by applicable law or agreed to in writing,
~~software distributed under the License is distributed on an
~~"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~KIND, either express or implied.  See the License for the
~~specific language governing permissions and limitations
~~under the License.

Integration Tests

  Integration tests are run on projects that contains the plugin <<<maven-test-plugin>>> under the POM build
  configuration.
  
  Since integration test itself is for testing, the <<<\<testSourceDirectory\>>>> is no longer needed and the
  <<<\<sourceDirectory\>>>> is enough to be able to run the project test successfully. This matches the Maven
  convention of placing integration tests in a separate module.

  The following POM snippet is an example build configuration of an integration test project.

+------+
  <build>
    <sourceDirectory>./</sourceDirectory>
    <plugins>
      [...]
      <plugin>
      <groupId>org.apache.npanday.plugins</groupId>
      <artifactId>maven-test-plugin</artifactId>
      <extensions>true</extensions>
      <configuration>
        <integrationTest>true</integrationTest>
      </configuration>
      </plugin>
    </plugins>
  </build>
+------+

  To run the test:

----
mvn test
----

  Like regular unit tests, the plugin requires that NUnit be installed and on the PATH to execute the tests.
