我有一个maven2的多模块项目,并在我的每个子模块我有一个名为JUnit测试Test.java
和Integration.java
分别为单元测试和集成测试。 当我执行:
mvn test
所有的JUnit测试的*Test.java
子模块中被执行。 当我执行
mvn test -Dtest=**/*Integration
没有任何的Integration.java
测试子模块内得到执行。
这些看似相同的指令给我,但一个与-Dtest = / * **的集成不工作会显示在父级别中运行0测试,没有任何试验
您可以设置Maven的神火单独运行单元测试和集成测试。 在标准单元测试阶段运行的一切不匹配模式的集成测试。 然后,您创建运行只是集成测试第二个测试阶段 。
下面是一个例子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
的Maven构建的生命周期现在包括“集成测试”相对于运行集成测试,这是从在“测试”阶段运行单元测试单独运行。 据“包”后运行,所以如果你运行“MVN验证”,“MVN安装”,或“MVN部署”,集成测试将沿途运行。
默认情况下,集成测试运行名为test类**/IT*.java
, **/*IT.java
,和**/*ITCase.java
,但这是可以配置的。
有关如何连接这一切了,看细节故障安全插件 ,在保证安全使用的页面 (不正确地从以前的友情链接,我写这篇文章),并检查了这Sonatype的博客文章 。
我有整整做你想要做什么,它的伟大工程。 单元测试“*测试”始终运行,而“* IntegrationTests”只有当你做一个MVN验证或MVN安装运行。 这从我的POM片段。 serg10几乎拥有了正确的....但并不完全。
<plugin>
<!-- Separates the unit tests from the integration tests. -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Skip the default running of this plug-in (or everything is run twice...see below) -->
<skip>true</skip>
<!-- Show 100% of the lines from the stack trace (doesn't work) -->
<trimStackTrace>false</trimStackTrace>
</configuration>
<executions>
<execution>
<id>unit-tests</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<!-- Never skip running the tests when the test phase is invoked -->
<skip>false</skip>
<includes>
<!-- Include unit tests within integration-test phase. -->
<include>**/*Tests.java</include>
</includes>
<excludes>
<!-- Exclude integration tests within (unit) test phase. -->
<exclude>**/*IntegrationTests.java</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<!-- Never skip running the tests when the integration-test phase is invoked -->
<skip>false</skip>
<includes>
<!-- Include integration tests within integration-test phase. -->
<include>**/*IntegrationTests.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
祝好运!
您可以使用JUnit类和Maven很容易将它们分割。
这是非常,非常简要地低于划分单元测试和集成测试中。
定义一个标记接口
在分组使用类别的测试的第一步是建立一个标记接口。
此接口将被用来标记所有要运行的集成测试的测试。
public interface IntegrationTest {}
标记您的测试类
类别注释添加到您的测试类的顶部。 它需要你的新接口的名称。
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
配置Maven单元测试
该解决方案的优点在于没有真正改变对事物的单元测试的一面。
我们只是增加一些配置,以行家万无一失插件,使其忽略任何集成测试。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>
com.test.annotation.type.IntegrationTest
</excludedGroups>
</configuration>
</plugin>
当你做一个干净的MVN测试只有你没有标记的单元测试运行。
配置Maven集成测试
再次为这个配置非常简单。
我们使用标准的故障安全插件并将其配置为仅运行集成测试。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<groups>
com.test.annotation.type.IntegrationTest
</groups>
</configuration>
</plugin>
该配置采用了标准的执行目标,在构建的集成测试阶段运行故障安全插件。
现在,你可以做一个干净的MVN安装
这一次,以及运行单元测试,集成测试是在集成测试阶段运行。
你应该尝试使用Maven的故障安全插件 。 你可以告诉它包括一组特定的测试。
默认情况下,Maven的只运行在类名有测试的地方测试。
重命名为IntegrationTest,它可能会工作。
或者你可以改变Maven的配置,以包括文件,但它可能更容易,更好仅举你的测试SomethingTest。
从夹杂物和测试排除 :
默认情况下,一定能成功的插件会自动包括与以下通配符模式的所有测试类:
- “** /测试*的.java” - 包括所有的子目录,并以“测试”开始所有的Java文件名。
- “** / * Test.java” - 包括所有的子目录,并以“测试”结束所有的java文件名。
- “** / * TestCase.java” - 包括所有的子目录,并以“TestCase的”最终所有的Java文件名。
如果测试类不符合命名约定去,然后配置神火插件,并指定要包括的测试。
与Maven运行集成测试的另一种方法是利用配置文件功能的:
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>integration-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
<excludes>
<exclude>**/*StagingIntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
...
运行“MVN全新安装”将运行默认的构建。 正如上面集成测试规定将被忽略。 运行“MVN清洁安装-P集成,测试”将包括集成测试(我也忽略了我的分期集成测试)。 另外,我有一个运行我的集成测试,每天晚上CI服务器和我发出命令“MVN测试-P集成的测试”。
您可以按照行家文件运行单元测试的构建与运行分开的集成测试。
<project>
<properties>
<skipTests>true</skipTests>
</properties>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<skipITs>${skipTests}</skipITs>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
这将允许您使用默认情况下禁用所有集成测试运行。 为了运行它们,你使用这个命令:
mvn install -DskipTests=false