maven-surefire-plugin

举报
西魏陶渊明 发表于 2022/09/25 04:15:53 2022/09/25
【摘要】 maven-surefire-plugin Surefire 插件在test构建生命周期阶段用于执行应用程序的单元测试。 maven-surefire-plugin官网 (opens new window) # 一、介绍 如果你执行过mvn test或者执行其...

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 用法


    
  1. <build>
  2. <pluginManagement>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-surefire-plugin</artifactId>
  7. <version>3.0.0-M5</version>
  8. </plugin>
  9. </plugins>
  10. </pluginManagement>
  11. </build>
1 2 3 4 5 6 7 8 9 10 11

# 2.2 使用方法

mvn test

# 三、源码分析

# 3.1 学习目标

相关信息

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

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

# 3.2 学习搭建环境


    
  1. <!-- 先声明插件版本 -->
  2. <build>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-surefire-plugin</artifactId>
  7. <!-- JUnit 5 requires Surefire version 2.22.0 or higher -->
  8. <version>2.22.0</version>
  9. </plugin>
  10. </plugins>
  11. </build>
  12. <!-- 然后引入依赖,方便debug跟进源码-->
  13. <dependency>
  14. <groupId>junit</groupId>
  15. <artifactId>junit</artifactId>
  16. <version>4.13.2</version>
  17. <scope>test</scope>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.apache.maven.plugins</groupId>
  21. <artifactId>maven-surefire-plugin</artifactId>
  22. <version>3.0.0-M5</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.apache.maven</groupId>
  26. <artifactId>maven-core</artifactId>
  27. <version>3.8.4</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.apache.maven.surefire</groupId>
  31. <artifactId>surefire-junit4</artifactId>
  32. <version>3.0.0-M5</version>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.apache.maven</groupId>
  36. <artifactId>maven-plugin-api</artifactId>
  37. <version>${dep.maven-api.version}</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.apache.maven</groupId>
  41. <artifactId>maven-model</artifactId>
  42. <version>${dep.maven-api.version}</version>
  43. </dependency>
  44. <dependency>
  45. <groupId>org.apache.maven.plugin-tools</groupId>
  46. <artifactId>maven-plugin-annotations</artifactId>
  47. <version>${dep.maven-api.version}</version>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.apache.maven.plugins</groupId>
  51. <artifactId>maven-plugin-plugin</artifactId>
  52. <version>${dep.maven-api.version}</version>
  53. </dependency>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

# 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 知识点


    
  1. // 大于等于2.0.0,小于2.1.2
  2. VersionRange range = VersionRange.createFromVersionSpec("[2.0.0,2.1.2)");
  3. System.out.println(range.containsVersion(new DefaultArtifactVersion("1.0")));
  4. System.out.println(range.containsVersion(new DefaultArtifactVersion("2.0.0")));
  5. System.out.println(range.containsVersion(new DefaultArtifactVersion("2.1.1")));
  6. System.out.println(range.containsVersion(new DefaultArtifactVersion("2.1.2")));
  7. System.out.println("------------");
  8. VersionRange range2 = VersionRange.createFromVersionSpec("[2.0.0-M1SN,2.1.2)");
  9. System.out.println(range2.containsVersion(new DefaultArtifactVersion("2.1.1-M2")));
1 2 3 4 5 6 7 8 9

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/125858026

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。