如何在Maven打包过程停止执行单元测试
1. 概述
通常跳过单元测试是一个坏的开发习惯。然而,在某些情况下也有例外情况;可能是当我们在开发新代码并希望运行测试无法通过或无法编译的中间构建时。
仅在这些情况下,我们可以跳过测试,以避免编译和运行它们的开销。当然,考虑到不运行测试会导致隐藏的程序BUG在开发过程中不被发现
在本文中,我们将介绍使用Maven跳过测试的各种命令和参数
2. Maven Lifecycle 生命周期中如何跳过单元测试
在讨论如何跳过测试的细节之前,我们必须了解测试是在什么时候编译或运行的。在关于Maven目标和阶段,需要深入了Maven生命周期的概念,但在本文中,重要的是要知道Maven可以:
- 忽略测试
- 编译测试
- 运行测试
在我们的示例中,我们将使用打包阶段作为列子,这包括编译和运行测试。本教案例中使用Maven Surefire插件作为编译打包插件
3. 使用命令行标志符
3.1 在编译阶段跳过测试
首先,让我们看一个无法编译的测试示例:
@Test
public void thisDoesntCompile() {
some bug ;
}
当我们运行command-line命令时:
mvn package
我们会在控制台中看到一个错误:
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/baeldung/skip-tests/src/test/java/com/antmordel/skiptests/PowServiceTest.java:[11,9] not a statement
[INFO] 1 error
因此,我们需要跳过测试源代码的编译阶段。在Maven中,我们可以设置**-Dmaven.test.skip** 标识符跳过单元测试代码的编译和执行:
mvn -Dmaven.test.skip package
通过上面的设置,单元测试代码没有被编译,也没有被执行
3.2 跳过测试执行
第二种情况,让我们看看如何只编译测试代码,但跳过运行单元测试过程。这对于那些我们没有更改方法或类的签名但更改了业务逻辑而导致测试失败的情况非常有用。让我们考虑一个像下面这样设计的测试用例,它总是会失败:
@Test
public void thisTestFails() {
fail("This is a failed test case");
}
由于在单元测试中了fail()语句,如果我们在打包阶段执行构建将会失败,并出现错误:
[ERROR] Failures:
[ERROR] PowServiceTest.thisTestFails:16 This is a failed test case
[INFO]
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
假设我们想要跳过运行测试,但仍然希望编译它们。在这种情况下,我们可以使用**-DskipTests**标志符:
mvn -DskipTests package
上面打包阶段将会执行成功,同时会跳过单元测试执行。此外,在Maven中,有一个专门用于运行集成测试的插件,称为Maven failsafe plugin,使用-DskipTests将跳过单元测试(surefire)和集成测试(failsafe)的执行。为了跳过集成测试,我们可以通过-DskipITs系统属性。
4. 使用Maven Configuration
如果非临时跳过单元测试,而是希望长期停止单元测试,我们可以修改POM.xml文件
4.1 跳过测试代码编译
正如上文介绍的,我们希望不编译测试代码,我们可以在POM.xml中做如下设置:
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
请注意,我们可以通过在命令行中添加相反的标志来覆盖该值:
mvn -Dmaven.test.skip=false package
4.2 跳过测试执行
同样,我们只编译测试代码,但跳过测试执行。我们可以修改Maven Surefire插件配置:
properties>
<tests.skip>true</tests.skip>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<skipTests>${tests.skip}</skipTests>
</configuration>
</plugin>
上面,tests.skip是我们定义的自定义属性。因此,我们可以覆盖它,如果我们想要执行测试执行如下操作:
mvn -Dtests.skip=false package
5. 结论过
在本文中,我们介绍了两种跳过Maven跳过执行单元测试的方法,一种是通过命令行参数形式,另一种是通过设置POM.xml文件方式
标签:单元测试,Maven,编译,测试,跳过,我们,打包 来源: https://blog.csdn.net/kerongao/article/details/111131582
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。