这篇文章演示了如何在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

在Java 8之前的项目中使用JUnit 5相关推荐

  1. junit5_在Java 8之前的项目中使用JUnit 5

    junit5 这篇文章演示了如何在Java 8之前的项目中使用JUnit 5,并解释了为什么它是一个好主意. JUnit 5至少需要Java 8作为运行时环境,因此您想将整个项目更新为Java8.但是 ...

  2. java项目使用junit_在Java 8之前的项目中使用JUnit 5

    java项目使用junit 这篇文章演示了如何在Java 8之前的项目中使用JUnit 5,并解释了为什么它是一个好主意. JUnit 5至少需要Java 8作为运行时环境,因此您想将整个项目更新为J ...

  3. java 获取sqlsession_获取Java的MyBatis框架项目中的SqlSession的方法

    从XML中构建SqlSessionFactory从XML文件中构建SqlSessionFactory的实例非常简单.这里建议你使用类路径下的资源文件来配置. String resource = &qu ...

  4. 在maven项目中使用Junit进行单元测试

    在maven项目中使用Junit进行单元测试(一) 在maven项目中使用Junit进行单元测试一 创建maven项目 编写测试用代码 小结 这是第一篇博文,所以我决定先从比较简单的内容写起,同时熟悉 ...

  5. java jndi使用_Java项目中使用JNDI连接数据库

    因为写的大作业经常用到数据库连接 所以自己写了个数据库连接的类 package DB_Link_info;/* * 数据库链接信息 */public class DB_link_Info {publi ...

  6. java web access_Java Web项目中连接Access数据库的配置方法

    本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...

  7. Java之Lists.Partition项目中的使用

    开心一笑 [媳妇儿问我:"孩子都快出生了,你名字想好了没呀?" 我说:"都想好了,要是生个儿子名字就叫"好帅" 媳妇儿问:"为什么呀?&qu ...

  8. java h2数据库_JAVA 项目中使用 H2 数据库

    JAVA 项目中使用 H2 数据库 发布时间:2018-06-08 15:43, 浏览次数:823 , 标签: JAVA 为什么要使用H2数据库 H2数据库是可以嵌入到JAVA项目中的,因为只需要导入 ...

  9. java byte 拓展_Java项目中如何扩展第三方jar包中的类?

    有些时候你对第三方得到jar包中的类并不是很满意,想根据实际情况做一些扩展.如果说第三方的jar包已经提供了一些可扩展的类,比如提供了Interceptor,Filter或者其他的类,那么使用原生的比 ...

最新文章

  1. 大数据学习——:wq不能退出vi编辑器
  2. 全球 Top 10 高材生赴神策数据的交流访问之旅
  3. oracle定时器定时删除30天前的数据_Redis的过期键删除策略
  4. 大额存款到期,银行不能给兑付怎么办?
  5. android http请求缓存,Android Http请求和响应使用协议缓冲区
  6. 块状元素的居中,首先设置宽度,再设 margin: 0 auto
  7. C/C++:Winsock网络编程—ping命令的简单实现
  8. 升级到Oracle 19c:你不可不知的十大SQL问题(上)
  9. git pull git add git commit git branch git更新代码git提交git分支管理
  10. TransUNet:Transformers医学图像分割强编码器
  11. c语言 字符型数据如何输入,scanf()函数如何输入字符型数据?
  12. (轉貼) 完全用Linux工作,摈弃Windows (OS) (Linux)
  13. Mac系统如何运行Windows exe程序?mac打开exe文件方法教程
  14. 微信公众号支付 使用基于thinkphp 使用微信官网的sdk
  15. linux如何更改mac地址
  16. [c++]实现分数计算器设计
  17. 什么是库存?什么是零库存?库存的定义
  18. Idea快速入门指南
  19. 【多校训练】2021牛客多校第二场
  20. 学术篇 | 多模态fNIRS脑电分类——基于脑机接口的深度学习算法

热门文章

  1. [清华集训2017]无限之环(网络流)
  2. hihocoder1147 时空阵(bfs树+DP)
  3. Div1 小A抓小B tarjan双连通分量缩点+dfs
  4. 动态规划训练8 [E - Multiplication Puzzle POJ1651]
  5. 博客文章列表(二)——算法、数据结构、数据库、ABCD
  6. JavaFX UI控件教程(十三)之Table View
  7. 谈谈HashMap线程不安全的体现
  8. 阿里巴巴对Java编程【单元测试】的规约
  9. mysql为数据库表起别名的注意事项
  10. 2015蓝桥杯省赛---java---B---8(饮料换购)