Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 如何跳过所有集成测试(-DskipITs)和一个单元测试mvn命令行_Java_Maven_Unit Testing_Command Line_Integration Testing - Fatal编程技术网

Java 如何跳过所有集成测试(-DskipITs)和一个单元测试mvn命令行

Java 如何跳过所有集成测试(-DskipITs)和一个单元测试mvn命令行,java,maven,unit-testing,command-line,integration-testing,Java,Maven,Unit Testing,Command Line,Integration Testing,我对Maven相对来说是新手。我在这个问题上做了很多研究和挖掘,但我似乎找不到答案,所以我想我会在这里提问 目标:我想在跳过集成测试以及一个特定的单元测试类的同时运行mvn clean install测试 我尝试了以下方法: mvn干净安装-DskipITs-Dtest=!MyTestClass测试 mvn清洁安装-DskipITs&&test=!MyTestClass测试 mvn清洁安装-DskipITs&test=!MyTestClass测试 但是,上述命令似乎都不起作用。上面三个命令中的第

我对Maven相对来说是新手。我在这个问题上做了很多研究和挖掘,但我似乎找不到答案,所以我想我会在这里提问

目标:我想在跳过集成测试以及一个特定的单元测试类的同时运行
mvn clean install测试

我尝试了以下方法:

mvn干净安装-DskipITs-Dtest=!MyTestClass测试

mvn清洁安装-DskipITs&&test=!MyTestClass测试

mvn清洁安装-DskipITs&test=!MyTestClass测试

但是,上述命令似乎都不起作用。上面三个命令中的第一个命令对我来说最有意义,但似乎在使用该命令时正在运行集成测试。这就是我对Maven的知识和理解存在差距的地方;我不确定这是否是预期的行为,或者这是否是在命令行上传递多个属性的适当方式

当我运行以下命令时:
mvn clean install-DskipITs test
,集成测试被成功跳过


我熟悉Maven构建生命周期,但可能我误解了一些东西或遗漏了一个细节。

与Maven的集成测试通常使用Maven failsafe插件运行

要告诉此插件跳过集成测试(请确保您的集成测试类名遵循约定*IT.java,否则您需要将它们包含在
中),您可以在插件的配置中或从命令行()执行此操作:

可以使用以下选项跳过单个测试:

mvn test -Dtest=!MyTestClass
因此,这应该是可行的:

mvn clean install -DskipITs -Dtest=!MyTestClass

对我有效的是以下命令:

mvn clean install -DskipITs "-Dtest=!MyTestClass, !**/*IT.java" test
我仍在学习Java,但以下是我认为在我的案例中发生的事情

有两个与Java测试相关的插件(可能还有更多,但这两个与我的问题相关):一个称为“maven failsafe插件”,另一个称为“maven surefire插件”。正如@Hovanesyan和其他人指出的,maven failsafe插件通常运行集成测试,而maven surefire插件通常运行单元测试()

在我的例子中,当我运行命令
mvnclean install-DskipITs-Dtest=!MyTestClass测试
,在进一步挖掘日志后,集成测试将失败,我将收到以下额外的错误消息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.21.0:test (default-test)
项目的集成测试可在名为
integrationtests
的目录中找到,并根据约定“MyIntegrationTestIT.java”命名。最终让我走上正轨的是:。这些文档描述了可以通过Maven命令传递的“test”参数

在我看来,当我传递参数
-Dtest=!MyTestClass
,就好像它指示Surefire插件“不要运行MyTestClass,而是每隔一个测试文件运行一次。”同时,
-DskipITs
参数指示Failsafe插件跳过集成测试(它一直在这么做)。当我以
“-Dtest=!MyTestClass,!***/*IT.java”
的形式显式调用我不想运行的测试文件时,Surefire完全理解了我想要做的事情。Surefire插件运行除MyTestClass和集成测试之外的所有测试,Failsafe插件跳过了集成测试

在我的例子中,我不完全理解为什么Surefire插件首先要运行集成测试。也许它与我正在使用的代码库中的一些配置设置有关,或者与集成测试文件的命名约定有关,或者与一些注释有关(我仍然在学习这些东西)。我确信这个答案可以被编辑,以包括我还没有的更多有用的信息或背景。在任何情况下,希望这些经验对其他遇到这个问题的人有所帮助


最后,在调试时,运行命令
mvn help:effective pom
并通过
-X
以及我的
mvn clean install test
命令有很大帮助。

此配置适用于我:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
      <excludes>
         <exclude>%regex[.*TestIT.*.class]</exclude>
      </excludes>
   </configuration>
</plugin>
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-failsafe-plugin</artifactId>
   <configuration>
      <includes>
         <include>%regex[.*TestIT.*.class]</include>
      </includes>            
   </configuration>
   <executions>
      <execution>
         <phase>test</phase>
         <goals>
            <goal>integration-test</goal>
            <goal>verify</goal>
         </goals>
      </execution>            
   </executions>
</plugin>

org.apache.maven.plugins
maven surefire插件
%正则表达式[.*TestIT.*.class]
org.apache.maven.plugins
maven故障保护插件
%正则表达式[.*TestIT.*.class]
测试
集成测试
验证

我相信这个答案可能会对您有所帮助:您已经知道如何跳过它。对于单元测试,使用
@Ignore
(假设JUnit)是您的一个选项吗?根据您编写的运行:
mvn clean install test
将运行多个重复的东西…您可以深入到
mvn clean install
,但通常不需要
安装。因此,您可以执行
mvn clean verify
。。。另请参阅关于maven生命周期的文档:您已经编写了maven中的集成测试是使用maven surefire插件运行的,这是完全错误的。Maven Failsafe插件旨在运行集成测试…与此相反,您的链接指向Maven Failsafe插件,所以我想您的答案上有一个类型…(第一句)。是的,谢谢,您是对的-这是一个文本错误的想法。此答案正好表明OP列出的命令“不工作”。
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
      <excludes>
         <exclude>%regex[.*TestIT.*.class]</exclude>
      </excludes>
   </configuration>
</plugin>
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-failsafe-plugin</artifactId>
   <configuration>
      <includes>
         <include>%regex[.*TestIT.*.class]</include>
      </includes>            
   </configuration>
   <executions>
      <execution>
         <phase>test</phase>
         <goals>
            <goal>integration-test</goal>
            <goal>verify</goal>
         </goals>
      </execution>            
   </executions>
</plugin>