Java 如何运行Maven集成测试
我有一个maven2多模块项目,在我的每个子模块中,我都有JUnit测试,分别命名为Java 如何运行Maven集成测试,java,maven-2,testing,surefire,Java,Maven 2,Testing,Surefire,我有一个maven2多模块项目,在我的每个子模块中,我都有JUnit测试,分别命名为Test.java和Integration.java,用于单元测试和集成测试。当我执行: mvn测试 执行子模块中的所有JUnit测试*Test.java。当我执行 mvn测试-Dtest=***集成 所有Integration.java测试都不会在子模块中执行 在我看来,这些命令似乎完全相同,但带有-Dtest=/*集成**的命令不起作用。它显示在父级运行的0个测试,默认情况下,没有任何测试,Maven只运行在
Test.java
和Integration.java
,用于单元测试和集成测试。当我执行:
mvn测试
执行子模块中的所有JUnit测试*Test.java
。当我执行
mvn测试-Dtest=***集成
所有Integration.java
测试都不会在子模块中执行
在我看来,这些命令似乎完全相同,但带有-Dtest=/*集成**的命令不起作用。它显示在父级运行的0个测试,默认情况下,没有任何测试,Maven只运行在类名中某处具有测试的测试 重命名为IntegrationTest,它可能会工作 或者,您可以更改Maven配置以包含该文件,但将测试命名为SomethingTest可能更容易、更好 发件人: 默认情况下,Surefire插件将 自动包含所有测试类 使用以下通配符模式:
-包括其所有子目录和所有java 以“Test”开头的文件名\*\*/Test\*.java
-包括其所有子目录和所有java 以“Test”结尾的文件名\*\*/\*Test.java
-包括其所有子目录和所有java 以“TestCase”结尾的文件名\*\*/\*TestCase.java
您可以将Maven的Surefire设置为分别运行单元测试和集成测试。在标准单元测试阶段,运行与集成测试模式不匹配的所有内容。然后创建第二个测试阶段,该阶段只运行集成测试 以下是一个例子:
org.apache.maven.plugins
maven surefire插件
**/*IntegrationTest.java
集成测试
测试
集成测试
没有一个
**/*IntegrationTest.java
您应该尝试使用。您可以告诉它包含一组特定的测试。我已经做了您想要做的事情,而且效果很好。单元测试“*测试”始终运行,而“*集成测试”仅在执行mvn验证或mvn安装时运行。这里是我的POM中的片段。serg10几乎做对了……但不完全正确
org.apache.maven.plugins
maven surefire插件
真的
假的
单元测试
测试
测试
假的
**/*Tests.java
**/*IntegrationTests.java
集成测试
集成测试
测试
假的
**/*IntegrationTests.java
祝你好运 现在包括用于运行集成测试的“集成测试”阶段,该阶段与在“测试”阶段运行的单元测试分开运行。它在“包”之后运行,因此如果您运行“mvn验证”、“mvn安装”或“mvn部署”,集成测试将一直运行
默认情况下,集成测试运行名为***/IT*.java
、***IT.java
和******ITCase.java
的测试类,但这是可以配置的
有关如何将这一切连接起来的详细信息,请参阅(在我撰写本文时未正确链接上一页),并查看。使用Maven运行集成测试的另一种方法是使用配置文件功能:
。。。
org.apache.maven.plugins
maven surefire插件
**/*Test.java
**/*IntegrationTest.java
集成测试
org.apache.maven.plugins
maven surefire插件
**/*IntegrationTest.java
**/*staginintegrationtest.java
...
运行“mvn clean install”将运行默认版本。如上所述,集成测试将被忽略。运行“mvn clean install-P集成测试”将包括集成测试(我也会忽略我的登台集成测试)。此外,我有一台每天晚上运行集成测试的CI服务器,为此我发出命令“mvn test-P integration tests”。
您可以使用JUnit categories和Maven非常轻松地拆分它们。
下面通过拆分单元和集成测试非常、非常简要地展示了这一点
此接口将用于标记要作为集成测试运行的所有测试
public interface IntegrationTest {}
标记您的考试类别
将类别注释添加到测试类的顶部。它采用新接口的名称。import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
配置Maven单元测试
这个解决方案的美妙之处在于
<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
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>${skipUnitTests}</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<includes>
<include>**/*IT.java</include>
</includes>
<skipTests>${skipIntegrationTests}</skipTests>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<properties>
<skipTests>false</skipTests>
<skipUnitTests>${skipTests}</skipUnitTests>
<skipIntegrationTests>${skipTests}</skipIntegrationTests>
</properties>