junit5_在Java 8之前的项目中使用JUnit 5
![](/assets/blank.gif)
junit5
这篇文章演示了如何在Java 8之前的项目中使用JUnit 5,并解释了为什么它是一个好主意。
JUnit 5至少需要Java 8作为运行时环境,因此您想将整个项目更新为Java8。但是有时由于某些原因,您无法立即将项目更新为Java8。例如,应用程序服务器的版本生产环境中的产品仅支持Java7。但是由于生产代码中的某些问题,更新不会很快进行。
现在,问题是如何在不将生产代码更新为Java 8的情况下使用JUnit 5?
在Maven中(当然在Gradle中也是如此),您可以分别为生产代码和测试代码设置Java版本。
<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>7</source><target>7</target><testSource>8</testSource><testTarget>8</testTarget></configuration></plugin></plugins>
</build>
前提条件是您使用Java 8 JDK进行构建。
如果尝试在Java 7生产代码中使用Java 8功能,则Maven将使构建失败。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project junit5-in-pre-java8-projects: Compilation failure
[ERROR] /home/sparsick/dev/workspace/junit5-example/junit5-in-pre-java8-projects/src/main/java/Java7Class.java:[8,58] lambda expressions are not supported in -source 7
[ERROR] (use -source 8 or higher to enable lambda expressions)
现在,您可以在项目中引入JUnit 5,并开始使用JUnit 5编写测试。
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><scope>test</scope>
</dependency>
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><scope>test</scope>
</dependency>
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><scope>test</scope>
</dependency>
<!-- junit-vintage-engine is needed for running elder JUnit4 test with JUnit5-->
<dependency><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId><scope>test</scope>
</dependency>
您不需要迁移旧的JUnit 4测试,因为JUnit 5具有测试引擎,可以与JUnit 5一起运行JUnit 4测试。因此,对于新测试,请使用JUnit 5,并且仅在需要时才迁移JUnit 4测试。
尽管您无法将生产代码更新为较新的Java版本,但是将测试代码更新为较新的Java版本有一些好处。
最大的好处是您可以在日常工作中编写测试时开始学习新的语言功能。 您不会在生产代码中犯初学者的错误。 您可以使用有助于改善测试的新工具。 例如,在JUnit 5中编写参数化测试比在JUnit 4中编写更舒适。以我的经验,在参数化测试有意义的情况下,开发人员使用JUnit 5编写参数化测试比使用JUnit 4编写。
上述技术也适用于其他Java版本。 例如,您的生产代码在Java 11上,而您想在测试代码中使用Java 12功能。 该技术的另一个用例是在日常工作中学习另一种JVM语言,例如Groovy,Kotlin或Clojure。 然后在测试代码中使用新语言。
这种方法有一个小陷阱。 IntelliJ IDEA无法分别设置Java版本以进行生产和测试。 因此,您必须将整个项目设置为Java8。如果您的生产代码使用正确的Java版本,则只有Maven构建会为您提供反馈。
链接
- Maven项目设置
翻译自: https://www.javacodegeeks.com/2019/01/using-junit-5-pre-java-8-projects.html
junit5
junit5_在Java 8之前的项目中使用JUnit 5相关推荐
- java项目使用junit_在Java 8之前的项目中使用JUnit 5
java项目使用junit 这篇文章演示了如何在Java 8之前的项目中使用JUnit 5,并解释了为什么它是一个好主意. JUnit 5至少需要Java 8作为运行时环境,因此您想将整个项目更新为J ...
- 在Java 8之前的项目中使用JUnit 5
这篇文章演示了如何在Java 8之前的项目中使用JUnit 5,并解释了为什么它是一个好主意. JUnit 5至少需要Java 8作为运行时环境,因此您想将整个项目更新为Java8.但是有时由于某些原 ...
- java 获取sqlsession_获取Java的MyBatis框架项目中的SqlSession的方法
从XML中构建SqlSessionFactory从XML文件中构建SqlSessionFactory的实例非常简单.这里建议你使用类路径下的资源文件来配置. String resource = &qu ...
- 在maven项目中使用Junit进行单元测试
在maven项目中使用Junit进行单元测试(一) 在maven项目中使用Junit进行单元测试一 创建maven项目 编写测试用代码 小结 这是第一篇博文,所以我决定先从比较简单的内容写起,同时熟悉 ...
- java jndi使用_Java项目中使用JNDI连接数据库
因为写的大作业经常用到数据库连接 所以自己写了个数据库连接的类 package DB_Link_info;/* * 数据库链接信息 */public class DB_link_Info {publi ...
- java web access_Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
- Java之Lists.Partition项目中的使用
开心一笑 [媳妇儿问我:"孩子都快出生了,你名字想好了没呀?" 我说:"都想好了,要是生个儿子名字就叫"好帅" 媳妇儿问:"为什么呀?&qu ...
- java h2数据库_JAVA 项目中使用 H2 数据库
JAVA 项目中使用 H2 数据库 发布时间:2018-06-08 15:43, 浏览次数:823 , 标签: JAVA 为什么要使用H2数据库 H2数据库是可以嵌入到JAVA项目中的,因为只需要导入 ...
- java byte 拓展_Java项目中如何扩展第三方jar包中的类?
有些时候你对第三方得到jar包中的类并不是很满意,想根据实际情况做一些扩展.如果说第三方的jar包已经提供了一些可扩展的类,比如提供了Interceptor,Filter或者其他的类,那么使用原生的比 ...
最新文章
- 统计文件中每个单词出现的次数
- 如何创建可变数量的变量?
- html判断表单是否为空,layui判断表单是否为空
- markdown 转义字符
- 解决 java.net.ConnectException: Connection refused: connect 异常
- fork vfork exit _exit (转)
- Window服务器可安装的live messager最新版本-20090826
- GridView批量删除页面最后N条数据时自动翻到上一页问题
- error: expected expression before ‘;’ token的问题
- 【js】Object.prototype.hasOwnProperty()
- 你的SQL语句放在了哪里?
- python获取日期的年月日_python datetime和time的一些疑惑解答 及 获取上年同期、上月等日期...
- Cisco常见命令大全
- ios tableView截长屏图片,第三方分享
- MSR5560 路由器映射
- 教你如何查询车辆出险记录
- 分布式文件系统(HDFS)与linux系统文件系统关系
- JAVA练习题38:正则表达式基本练习
- 调用链监控 - Tracing - APM
- 在多模态模型训练时,如何合适地融合单模态损失
热门文章
- cmder tips
- IE6/7/8/9中Table/Select的innerHTML不能赋值
- linux synproxy 抵御 ddos攻击的原理和优化
- golang mysql 错误 sql: unknown driver “mysql“ (forgotten import?) 解决方法
- cmake CMakeLists.txt 命令 add_compile_options、add_definitions、target_compile_definitions、build_command
- OWASP 2017 Top10 漏洞体系
- python3 issubset 判断列表子集
- centos7 rhel7 禁用ipv6
- linux ptrace反调试之抢占ptrace
- Windows驱动中的Crash回调