Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何运行Maven集成测试_Java_Maven 2_Testing_Surefire - Fatal编程技术网

Java 如何运行Maven集成测试

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只运行在

我有一个maven2多模块项目,在我的每个子模块中,我都有JUnit测试,分别命名为
Test.java
Integration.java
,用于单元测试和集成测试。当我执行:

mvn测试

执行子模块中的所有JUnit测试
*Test.java
。当我执行

mvn测试-Dtest=***集成

所有
Integration.java
测试都不会在子模块中执行


在我看来,这些命令似乎完全相同,但带有-Dtest=/*集成**的命令不起作用。它显示在父级运行的0个测试,默认情况下,没有任何测试,Maven只运行在类名中某处具有测试的测试

重命名为IntegrationTest,它可能会工作

或者,您可以更改Maven配置以包含该文件,但将测试命名为SomethingTest可能更容易、更好

发件人:

默认情况下,Surefire插件将 自动包含所有测试类 使用以下通配符模式:

  • \*\*/Test\*.java
    -包括其所有子目录和所有java 以“Test”开头的文件名
  • \*\*/\*Test.java
    -包括其所有子目录和所有java 以“Test”结尾的文件名
  • \*\*/\*TestCase.java
    -包括其所有子目录和所有java 以“TestCase”结尾的文件名
如果测试类与 命名约定,然后配置 Surefire插件并指定测试 你想包括


您可以将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>