8. maven test
絮絮叨叨
在学习maven的生命周期和插件时,我们知道test阶段是与
maven-surefire-plugin:test
绑定的。想要创建单元测试,必须添加junit依赖,并且依赖范围是test。
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency> </dependencies>
如果仔细想想,为啥其他的生命周期阶段不用引入依赖呢,比如package就没有说要引入一个具有打包功能的依赖啊
其实,这是因为
maven-surefire-plugin
插件并不是一个单元测试框架,而是在执行test阶段的任务时,主动调用其他单元测试框架(如junit)来执行测试用例。因此,maven需要与其他单元测试框架集成,才能执行单元测试并生成丰富的测试报告。
这也是为什么,需要在pom文件中显式声明junit依赖的原因。
当然,除了junit,TestNG也是比较成熟的单元测试框架。maven能与junit和TestNG集成,从而实现单元测试。
1. 基于junit学习maven test
1.1 一些约定
执行mvn test
时,会自动执行src/test/java
目录下,所有满足以下命名的测试类:
**/Test*.java
: 任何子目录下、命名以Test开头的java类**/*Test.java
:任何子目录下、命名以Test结尾的java类**/*TestCase.java
:任何子目录下、命名以TestCase结尾的java类
- 这也是为什么我之前喜欢使用
Test*
命名的测试类,仍然能正常执行单元测试的原因
养成习惯,执行测试时,加上clean !!!
加上
clean
,会清除target目录的class和resource数据,重新进行代码编译虽然maven会智能检测是否存在代码变化,为了保险起见,还是手动加上
clean
比较好所以使用maven进行测试时,基础的命令为
mvn clean test
1.2 跳过测试
- 我们在执行项目打包或安装时,总有各种各样的理由跳过单元测试。
- 跳过测试有三种方法:
-DskipTests
在执行包含test阶段的maven命令时,可以通过添加
-DskipTests
来跳过单元测试。更准确的说,是跳过
test
阶段,但testCompile
阶段仍会执行。[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven-tests --- ... [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven-tests --- [INFO] Tests are skipped. [INFO]
-Dmaven.test.skip=true
之前在介绍如何查看插件信息时,以
maven-surefire-plugin
插件的test目标为例,介绍了插件目标的参数skip
,包括该参数对应的命令行参数maven.test.skip
该参数不仅会跳过
test
阶段,还会跳过testCompile
阶段[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven-tests --- [INFO] Not compiling test sources [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven-tests --- [INFO] Tests are skipped.
-Dtest + -DfailIfNoTests=false
-Dtest
和-DfailIfNoTests
选项结合使用,可以达到跳过单元测试的目的
-Dtest选项
-Dtest
选项用于指定测试类型,且需要指定至少一个测试类。-Dtest
用法一:指定一个或多个测试类# 指定一个测试类 mvn clean test -Dtest=HelloTest# 指定多个测试类,测试类之间使用逗号分隔 mvn test -Dtest=HelloTest,PrintTest
-Dtest
用法二:使用正则表达式,灵活指定测试类mvn clean test -Dtest=Random*Test
-Dtest
用法三:正则表达式和明确指定相结合mvn clean test -Dtest=Random*Test,HelloTest
如果使用
-Dtest
,却不为其指定任何测试类,执行会报错mvn clean test -Dtest
报错信息如下,提示使用
-DfailIfNoTests=false
来忽略No tests were executed!
错误
巧妙跳过测试
这时我们可以通过
-DfailIfNoTests=false
配置,让maven在无测试类时不报错,这样也就可以跳过test阶段了mvn clean test -Dtest -DfailIfNoTests=false
成功完成测试,并未执行任何测试类
当然,这种跳过不像前两种方式是真正的跳过,而是说在test阶段没有需要测试的类,却不抛出
No tests were executed!
错误这是跳过测试的曲线救国 方法
8. maven test相关推荐
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...
- OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3
OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...
- Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库
示例见:Gitte 公仓设置 在项目中添加maven-publish的插件 plugins {kotlin("jvm") version "1.3.72"kot ...
- springboot项目使用junit4进行单元测试,maven项目使用junit4进行单元测试
首先,maven项目中引入依赖 <dependency><groupId>junit</groupId><artifactId>junit</ar ...
- IDEA中maven的命令及作用
maven中的Lifecycle中的那些按钮都有哪些,都有什么功能呢? validate:验证项目的正确性以及包含所有必要的信息 compile:编译源码 test:编译和运行测试代码 package ...
- 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。
maven中有一个大多数人都忽视或者没有用到过的一个功能--install,大多数java开发人员都了解maven,使用maven进行依赖管理.但使用的大多数功能不过是clean清理.compile编 ...
- 使用Maven打包生成的-SNAPSHOT.jar与-RELEASE.jar分别代表什么?SNAPSHOT是什么意思?RELEASE是什么意思?
使用Maven打包后生成 XXXXXXX-1.0.0-SNAPSHOT.jar 和 XXXXXXX-1.0.0-RELEASE.jar 的区别???? 首先,根本原因:这是因为你的pom.xml中的项 ...
- 手动将jar包导入pom依赖,让jar包适配本地maven项目
前言: Oracle对maven很久没有更新依赖,虽然19年更新了一版,但pom引入一直有错误. 我用的是oralce 12的依赖,虽然有jar包,但是依赖和pom没有适配,项目打包的时候还要去中央仓 ...
- pom文件中引入常用的maven仓库
给大家分享几个maven仓库,如果本地总是下载很慢的话可以尝试换一下仓库或者多加几个.可以直接拖放在pom.xml中使用. 阿里云仓库 <mirrors><mirror>< ...
- Maven安装与配置(最实用!!!)eclipse中配置maven
Maven安装与配置 一.需要准备的东西 JDK Eclipse(本章主要是在eclipse中进行配置maven) Maven程序包 二.下载与安装 1. 前往maven下载最新版的Maven程序: ...
最新文章
- 设计模式(6)-装饰器(认识程序中的装饰器)
- wuhan2020:武汉新型冠状病毒防疫开源信息收集平台
- 2_1_6 递归与分治策略(汉诺塔问题)
- linux将日期和日历信息追加到文件中_Linux任务调度
- LeetCode 2210. 统计数组中峰和谷的数量
- MySQL流浪记(七)—— MySQL删除表数据
- 最大子数组累加和(2种方法)
- QA:rustup-init error: caused by: 拒绝访问。 (os error 5)出现权限拒绝
- 12306的数据库设计
- 美团笔试题解2022-3-12号
- Vue3.0调用PC端本地摄像头录像
- 【沙龙干货分享】你要知道的N个Android适配问题
- SQL注入常用WAF绕过姿势
- 怎么解决电脑系统故障?
- 全国大学生GIS应用技能大赛(开发试题参考)
- php退款系统设计思路,关于退款的10篇文章推荐
- 097 《终结拖延症》简记
- 英语学习网站超级大全
- oracle 使用trigger实现主键自增
- 用通俗易懂的方式讲解:主成分分析(PCA)算法及案例(Python 代码)
热门文章
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos