【maven实战】37-maven-surefire-plugin介绍

2023-11-29 00:08

本文主要是介绍【maven实战】37-maven-surefire-plugin介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

maven本身并不是一个单元测试框架,java中主流的单元测试框架为JUnit和TestNG。Maven所做的只是在构建执行到特定生命周期阶段的时候通过插件来执行JUnit或TestNG的测试用例。这一插件就是maven-surefire-plugin,可以称之为测试运行器,它能很好地兼容JUnit3,JUnit4以及TestNG。

回顾一下default生命周期,其中的test阶段被定义为使用单元测试框架运行测试。我们知道生命周期阶段需要绑定到某个插件的目标才能完成真正的工作,test阶段正是maven-surefire-plugin的test目标绑定了,这是一个内置的绑定。在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名模式的测试类,这组模式为:

  • **/Test*.java:任何子目录下所有命名以Test开关的Java类。
  • **/*Test.java:任何子目录下所有命名以Test结尾的Java类。
  • **/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java类。

跳过测试:在命令行中加入参数skipTests就可以了。

mvn package -DskipTests

当然也可以在POM中配置maven-surefire-plugin插件来提供该属性,不推荐这种做法,如果配置POM让项目长时间跳过测试,还要测试代码做什么呢?

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.5</version><configuration><skipTests>true</skipTests></configuration>
</plugin> <skipTests>true</skipTests></configuration>
</plugin>

有时候用户不仅仅想跳过测试运行,还想临时性地跳过测试代码的编译,Maven也允许你这么做,但记住这是不推荐的:

mvn package -Dmaven.test.skip=true

参数maven.test.skip同时控制了maven-compiler-plugin和maven-surefire-plugin两个插件的行为,测试代码编译跳过了,测试运行也跳过了。

对于命令行参数maven.test.skip的POM配置,但这种方法也是不推荐使用的。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.1</version><configuration><skip>true</skip></configuration>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.5</version><configuration><skip>true</skip></configuration>
</plugin>

实际上maven-compiler-plugin的testCompile目标和maven-surefire-plugin的test目标都提供了一个参数skip用来跳过测试编译和测试运行,而这个参数对应的命令行表达式为maven.test.skip

动态指定要运行的测试用例:maven-surefire-plugin提供了一个test参数让maven用户能够在命令行指定要运行的测试用例就可以使用如下命令:

mvn test -Dtest=RandomTest

这里test参数的值是测试用例的类名,这行命令的效果就是只有RandomTest这一个测试类得到运行。

maven-surefire-plugin的test参数还支持高级一些的赋值方式,能让用户更灵活地指定需要运行的测试用例。如:

mvn test -Dtest=Random*Test

星号可以匹配零个或多个字符,上述命令会运行项目中所有类名以Random开头Test结尾的测试类。

除了星号匹配还可以使用逗号指定多个测试用例:

mvn test -Dtest=Random1Test,Random2Test

当然也可以结合星号和逗号。

mvn test -Dtest=Random*Test,Random2Test

如果maven-surefire-plugin找不到任何匹配的测试类,就会报错并导致构建失败,可以加上-DfailIfNoTests=false,告诉maven-surefire-plugin即使没有任何测试也不要报错:

mvn test -Dtest -DfailIfNoTests=false

包含与排除测试用例:Maven提倡约定优于配置原则,因此用户应该尽量遵守这一族模式来为测试类命名。即便如此maven-surefire-plugin还是允许用户通过额外的配置来自定义包含一些其他测试类,或者排除一些符合默认命名模式的测试类。

例如由于历史原因有些项目所有测试类名称都以Tests结尾,这样不符合默认的3种模式,用户可以配置让Maven自动运行这些测试。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.5</version><configuration><includes><include>**/*Tests.java</include></includes></configuration>
</plugin><include>**/*Tests.java</include></includes></configuration>
</plugin>

类似地也可以使用excludes元素排除一些符合默认命名模式的测试类,如下:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.5</version><configuration><excludes><exclude>**/*Tests.java</exclude></excludes></configuration>
</plugin>

 




 

 

这篇关于【maven实战】37-maven-surefire-plugin介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/430714

相关文章

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语