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



我对Maven比较陌生。 我对这个话题做了很多研究和挖掘,但我似乎找不到答案,所以我想我会在这里问。

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

我尝试了以下方法:

mvn clean install -DskipITs -Dtest=!MyTestClass test

mvn clean install -DskipITs&&test=!MyTestClass test

mvn clean install -DskipITs&test=!MyTestClass test

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

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

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

与 maven 的集成测试通常使用 maven-failsafe-plugin 运行

要告诉这个插件跳过集成测试(确保你的集成测试类名称遵循约定 *IT.java,否则你需要将它们包含在<inclusions>中),你可以在插件的配置中执行此操作,或者从命令行(官方文档):

mvn test -DskipITs

可以使用以下方法跳过单个测试:

mvn test -Dtest=!MyTestClass

所以这应该有效:

mvn clean install -DskipITs -Dtest=!MyTestClass

对我有用的是以下命令:

mvn clean install -DskipITs "-Dtest=!MyTestClass, !**/*IT.java" test

我仍在学习Java,但这是我的情况

有两个插件与Java测试有关(可能还有更多,但这两个与我的问题有关):一个称为"maven-failsafe-plugin",而另一个称为"maven-surefire-plugin"。 正如@hovanessyan和其他人所指出的,maven-failsafe-plugin通常运行集成测试,而maven-surefire-plugin通常运行单元测试(Maven文档参考)。

就我而言,当我运行命令mvn clean install -DskipITs -Dtest=!MyTestClass test时,在进一步挖掘日志时,集成测试将失败,并且我会收到以下额外的隐藏错误消息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.21.0:test (default-test)

该项目的集成测试位于名为integrationtests的目录中,并根据约定"MyIntegrationTestIT.java"命名。 最终引导我走上正轨的是:Surefire docs。 这些文档描述了您可以使用 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>

相关内容

最新更新