maven-surefire-plugin Surefire 插件在test构建生命周期阶段用于执行应用程序的单元测试。

maven-surefire-plugin官网 (opens new window)

# 一、介绍

如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了。 maven-surefire-plugin是maven里执行测试用例的插件,不显示配置就会用默认配置。 这个插件的surefire:test命令会默认绑定maven执行的test阶段。

如果你自己声明了,那么可以指定自己的版本,并且可以配置自定义的参数。

# 二、实践

# 2.1 用法

<build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version></plugin></plugins></pluginManagement></build>
1234567891011

# 2.2 使用方法

mvn test

# 三、源码分析

# 3.1 学习目标

相关信息

框架整体比较复杂,但是对于我们有学习价值的东西不多,我们没必要太深入研究。在此只提几个关键的知识点学习。

  1. maven-surefire-plugin的常用参数及作用
  2. maven-surefire-plugin实现单测的原理

# 3.2 学习搭建环境

<!-- 先声明插件版本 --><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><!-- JUnit 5 requires Surefire version 2.22.0 or higher --><version>2.22.0</version></plugin></plugins></build><!-- 然后引入依赖,方便debug跟进源码--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version></dependency><dependency><groupId>org.apache.maven</groupId><artifactId>maven-core</artifactId><version>3.8.4</version></dependency><dependency><groupId>org.apache.maven.surefire</groupId><artifactId>surefire-junit4</artifactId><version>3.0.0-M5</version></dependency><dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-api</artifactId><version>${dep.maven-api.version}</version></dependency><dependency><groupId>org.apache.maven</groupId><artifactId>maven-model</artifactId><version>${dep.maven-api.version}</version></dependency><dependency><groupId>org.apache.maven.plugin-tools</groupId><artifactId>maven-plugin-annotations</artifactId><version>${dep.maven-api.version}</version></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-plugin-plugin</artifactId><version>${dep.maven-api.version}</version></dependency>
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556

# 3.3 找到插件入口

前面通过学习知道Mojo是运行的核心类,而SurefirePlugin就是Mojo的子类。 由此可知,如果要学习这个 maven-surefire-plugin,入口就是在SurefirePlugin类。

# 四、 带着问题来学习

# 4.1 常用的参数都有那些

大多数为不常用的

是否常用 参数名 使用方法 解释
常用 skipTests -D,或者xml配置标签 用于跳过单测
常用 maven.test.skip.exec -D,或者xml配置标签 用于跳过单测
常用 maven.test.skip -D,或者xml配置标签 用于跳过单测
不常用 testClassesDirectory xml配置标签 指定测试模块目录编译后目录
不常用 maven.test.dependency.excludes -D,或者xml配置标签 要排除的依赖,格式:groupId:artifactId
不常用 maven.test.additionalClasspath -D,或者xml配置标签 追加classpath
不常用 project.build.testSourceDirectory xml配置标签 指定测试模块目录源码目录
不常用 excludes xml配置 指定规则的类不需要被单测,eg: **/*Test.java
不常用 surefire.reportNameSuffix -D,或者xml配置标签 test报表后缀
不常用 maven.test.redirectTestOutputToFile -D,或者xml配置标签 运行的单侧输出重定向到report目录中
不常用 failIfNoTests -D,或者xml配置标签 如果没有单测就报错
不常用 forkMode -D,或者xml配置标签 运行模式
不常用 jvm -D,或者xml配置标签 指定jvm目录,如果不指定会读取系统
不常用 argLine -D,或者xml配置标签 Jvm运行参数
不常用 threadCount -D,或者xml配置标签 线程数
不常用 forkCount -D,或者xml配置标签 指定启用多少个vm,1.5C 以数字结尾,数字乘以cpu核心数
不常用 reuseForks -D,或者xml配置标签 是否可重新使用forks进程
不常用 disableXmlReport -D,或者xml配置标签 禁用xml报告
不常用 enableassertions -D,或者xml配置标签 启用断言assert语句

forkMode 可设置值有 “never”, “once”, “always” 和 “pertest”。

  • pretest: 每一个测试创建一个新进程,为每个测试创建新的JVM是单独测试的最彻底方式,但也是最慢的,不适合hudson上持续回归。
  • once:在一个进程中进行所有测试。once为默认设置,在Hudson上持续回归时建议使用默认设置。
  • always:在一个进程中并行的运行脚本,Junit4.7以上版本才可以使用,surefire的版本要在2.6以上提供这个功能,

# 4.2 知识点

// 大于等于2.0.0,小于2.1.2
VersionRange range = VersionRange.createFromVersionSpec("[2.0.0,2.1.2)");
System.out.println(range.containsVersion(new DefaultArtifactVersion("1.0")));
System.out.println(range.containsVersion(new DefaultArtifactVersion("2.0.0")));
System.out.println(range.containsVersion(new DefaultArtifactVersion("2.1.1")));
System.out.println(range.containsVersion(new DefaultArtifactVersion("2.1.2")));
System.out.println("------------");
VersionRange range2 = VersionRange.createFromVersionSpec("[2.0.0-M1SN,2.1.2)");
System.out.println(range2.containsVersion(new DefaultArtifactVersion("2.1.1-M2")));
123456789

maven-surefire-plugin相关推荐

  1. maven deploy plugin_学习Maven之Maven Surefire Plugin

    1.maven-surefire-plugin是个什么鬼? 如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了.maven- ...

  2. maven配置testng_TestNG Maven Surefire插件配置

    maven配置testng TestNG Maven surefire plugin configurations let us define which tests to execute when ...

  3. Maven项目打包时报错Cannot invoke “org.apache.maven.surefire.shade.org.apache.commons.lang3.JavaVersion.atLe

    打包项目时遇到一个报错,每次都会出现,查了很多方法后来找到了解决办法 Cannot invoke "org.apache.maven.surefire.shade.org.apache.co ...

  4. 学习Maven之Maven Enforcer Plugin

    1.Maven Enforcer plugin是什么鬼? 在说这个插件是什么前我们先思考这么一个问题:当我们开发人员进入项目组进行开发前,要准备开发环境,而领导总是会强调工具的统一,编译环境的统一.比 ...

  5. Jenkins安装maven integration plugin失败解决方法

    Jenkins安装maven integration plugin失败解决方法 参考文章: (1)Jenkins安装maven integration plugin失败解决方法 (2)https:// ...

  6. 天生一对Maven2+Jetty -- Maven2创建并管理WebApp,并使用Maven Jetty Plugin在Eclipse中调试...

    天生一对"Maven2+Jetty" -- Maven2创建并管理WebApp,并使用Maven Jetty Plugin在Eclipse中调试 Maven2代比1代改进很多,其中 ...

  7. 解决Maven报Plugin execution not covered by lifecycle configuration

    解决Maven报Plugin execution not covered by lifecycle configuration http://blog.csdn.net/xxd851116/artic ...

  8. Maven Assembly Plugin - 如何将Maven工程打成一个可执行jar包

    参考自: http://blog.csdn.net/symgdwyh/article/details/6081532 Maven Assembly Plugin http://maven.apache ...

  9. maven docker plugin 常见问题解决

    maven docker plugin 常见问题解决 参考文章: (1)maven docker plugin 常见问题解决 (2)https://www.cnblogs.com/rongfengli ...

  10. Maven 的 Maven Compiler Plugin 插件

    当前 Maven Compiler Plugin 这个插件的版本为 3.10.1 你可以使用最新的版本. 我们今天主要说一下这个插件中 --release 参数 这个插件的配置方法如下: <?x ...

最新文章

  1. 发布文件打包springboit_程序安装包咋制作的?Qt程序打包三部曲,从应用程序到安装包...
  2. 水利水电工程管理与实务电子版习题_水利水电工程管理与实务复习题集.pdf
  3. 在mysql数据库中,文章表设计有啥好的思路
  4. 解决cvc-complex-type.2.4.a: Invalid content was found starting with element
  5. 关于bitnami redmine 的一些问题
  6. 五、Git多人开发:同时变更了文件名和文件内容如何处理?
  7. html怎么在图片上加文字_怎么把图片文字转换成word文档
  8. svn忽略指定文件夹下的文件_管理SteamLibrary文件夹下的acf文件
  9. android P版本ro.build.date时间修改
  10. Windows 10 开启有线无线802.1x脚本
  11. java第六次作业 计科1501班 张鹏
  12. 解决用word修改博客后字体变大的问题
  13. 牛客网暑期ACM多校训练营(第三场) E Sort String 哈希处理字符串(模板)
  14. opencv函数之saturate_cast(防止溢出)
  15. python实现ncm转mp3_滚动歌词制作 之 ncm格式转mp3
  16. 5. 块定义(AttributeDefinition)
  17. 教老婆学python
  18. fleaphp 快速开发php框架
  19. 小米路由器 mini 刷 Padavan 详细教程
  20. BGP联邦和团体的配置

热门文章

  1. 浅谈绝对定位与相对定位
  2. 制作中英文双语(多语)网站教程, 0基础1小时WordPress建站视频课程 (一步步建站, 一步也不少)
  3. 有限单元法基础 -- ING
  4. 数据透视表中巧用平均值计算及时妥投率
  5. Ubuntu18.04安装EVO工具
  6. ko文件 、insmod命令
  7. docker mysql Incorrect string value: ‘\xE4\xB8\xAD\xE5\x9B\xBD‘ for column ‘nation‘ at row 1
  8. 猫眼api html,猫眼选座API使用说明
  9. python如何实现手眼定标_相机标定(一):机器人手眼标定
  10. 酒浓码浓 - canvas标签