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

java项目使用junit

这篇文章演示了如何在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版本,但将测试代码更新为较新的版本还是有一定好处的。

最大的好处是您可以在日常工作中编写测试时开始学习新的语言功能。 您不会在生产代码中犯初学者的错误。 您可以使用有助于改善测试的新工具。 例如,在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项目使用junit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

set cache php,TP5之Cache的原理及使用

在当今大流量的互联网之中&#xff0c;Cache的重要性不言而喻。ThinkPhp5作为国内主流框架&#xff0c;提供了强大的Cache功能。让我们跟随本文&#xff0c;来剖析TP5 Cache的原理及使用。为什么需要Cache(缓存)?假设现在有一个小说网,有非常多的读者,有一篇新的章节更新了,那…

IntelliJ IDEA for Mac 项目窗口详解(Project Windows)

Show Members&#xff1a;显示成员&#xff0c;打勾&#xff0c;类的成员&#xff0c;例如&#xff1a;方法、字段等会显示出来&#xff0c;如下图所示&#xff1a; Show Excluded Files&#xff1a;显示排除的文件 Show Visibility Icons&#xff1a;显示可见性图标&#xff…

jdk9与jdk11哪个好_JDK 9、10和11中的安全性增强

jdk9与jdk11哪个好缩短JDK发布周期的原因之一是有可能推出更快的安全错误修复和增强功能。 在本文中&#xff0c;我们将简要回顾一下最新JDK版本中引入的主要安全增强功能。 由于这些增强功能中的大多数与TLS相关&#xff0c;因此必须了解TLS握手过程&#xff0c;如下图所示&am…

对一个java源文件进行正确编译,给定如下一个Java源文件Child.java,编译并运行Child.java,以下结果正确...

给定如下一个Java源文件Child.java&#xff0c;编译并运行Child.java&#xff0c;以下结果正确答&#xff1a;编译错误&#xff1a;没有找到构造器 Parent1()中国大学MOOC: 图像分割是基于灰度值的两个基本特性()答&#xff1a;相似性 连续性合同是平等主体之间的 法律行为。答…

多云平台_多云系统的授权

多云平台这是我目前正在使用的项目设计&#xff0c;用于消耗SPIFFE&#xff08; 受所有人保护的安全生产身份框架&#xff08; &#xff09;的信任和身份识别&#xff0c;在WSO2的Prabath Siriwardena先生的启发下&#xff0c;在Moratuwa大学的Gihan Dias教授的指导下&#xf…

XML的学习

文章目录XML 简介XML 语法XML 组成部分XML 约束DTD名称解释引用内部的 DTD引用外部的 DTDSchema语法格式详解命名空间前缀的意义XML 解析解析 XML 的方式&#xff08;思想&#xff09;解析器JSOUP 的使用JSOUP 入门快捷查询Jsoup 选择器查询XPathXML 简介 XML&#xff0c;Exte…

php 日期多余小时,在PHP中添加小时到日期时间

DateTime是PHP中的一个很棒的功能$string 1/1/2016 11.00PM;$date new DateTime($string);$interval new DateInterval(PT6H);$date->add($interval);// Now add another 6 hours while we are between 12:00 AM and 6:00 AMwhile($date->format(G) > 0 &&…

streaming api_通过Spring Integration消费Twitter Streaming API

streaming api1.概述 众所周知&#xff0c; Spring Integration具有用于与外部系统交互的大量连接器。 Twitter也不例外&#xff0c;而且很长一段时间以来&#xff0c;因为Spring Social一直是一个开箱即用的解决方案&#xff0c;Spring Integration利用该解决方案来连接到社交…

Linux命令之 mount -- 文件系统挂载

文章目录简介参考实例加载指定的分区参考简介 mount 命令用于加载文件系统到指定的加载点。此命令的最常用于挂载 cdrom&#xff0c;使我们可以访问 cdrom 中的数据&#xff0c;因为你将光盘插入 cdrom 中&#xff0c;Linux 并不会自动挂载&#xff0c;必须使用 Linux mount 命…

java 舍,java 4舍六入五成双

java 四舍六入五成双1. 小于5舍去&#xff0c;即舍去部分的数值小于保留部分的末位的半个单位&#xff0c;则末位不变&#xff1b;2. 大于5进1&#xff0c;即舍去部分的数值大于保留部分的末位的半个单位&#xff0c;则末位加1&#xff1b;3. 等于5时取偶数&#xff0c;即舍去部…

Linux命令之 umount -- 卸载文件系统

文章目录介绍参考介绍 umount 是“unmount”的缩写&#xff0c;译为“不挂载。所以它的”的作用是卸载已挂载的文件系统、目录或文件。 利用设备名或挂载点都能umount文件系统&#xff0c;不过最好还是通过挂载点卸载&#xff0c;以免使用绑定挂载&#xff08;一个设备&#x…

aws技术峰会2018_AWS re:Invent 2018的5大公告

aws技术峰会2018AWS re&#xff1a;Invent刚刚完成。 这是一个巨大的活动&#xff0c;在拉斯维加斯7家最大的酒店中&#xff0c;有50,000多名与会者&#xff0c;并发布了许多新的服务公告。 无服务器端通过新的lambda增强功能和更好的容器支持继续受到很多关注。 AWS通过新的“…

php 降低图像大小,PHP图像重新调整大小

我有一个PHP脚本,可以重新调整JPEG图像的大小.但是,由于某种原因,图像被扭曲,即使我将其编程为按比例计算x或y(取决于照片方向).质量是100,所以我不明白为什么它会使它们扭曲.我究竟做错了什么&#xff1f;编辑原始图像为3264px x 2448px谢谢代码&#xff1a;$im ImageCreateF…

Linux命令之 mke2fs -- 格式化分区(为分区写入文件系统)

文章目录简介命令选项参考实例格式化指定的分区简介 在磁盘分区上创建 ext2、ext3、ext4 等文件系统&#xff0c;默认情况下会创建 ext2。 虽然 mkfs 命令非常简单易用&#xff0c;但其不能调整分区的默认参数&#xff08;比如块大小是 4096 Bytes&#xff09;&#xff0c;这…

Linux格式化分区的命令

查看系统所有的文件系统&#xff1a; [~]$ df -ah Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s5s1 234Gi 15Gi 65Gi 19% 575614 682553320 0% / devfs 190Ki 190Ki 0Bi 100% 658 …

java jwt 验证_教程:用Java创建和验证JWT

java jwt 验证“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 Java对JWT&#xff08;JSON Web令牌&#xff09;的支持过去需要进行大量…

php网页布局边框,用CSS来设置网页当中的边框

摘要&#xff1a;跟着老师视频做的一个css边框小练习 css——边框 &nbs跟着老师视频做的一个css边框小练习 css——边框 .box{width:100px;height:100px;border:1px solid #ccc;border-radius:20px;}.main{width:100px;height:100px;border-top: 1px s…

Linux命令之 mkfs -- 在特定的分区创建 Linux 文件系统

文章目录简介选项参考示例在 /dev/hda5 上建一个 msdos 的文件系统&#xff0c;同时检查是否有坏轨存在&#xff0c;并且将过程详细列出来&#xff1a;将指定分区格式化成各种类型的文件系统简介 该命令用来在特定的分区创建 Linux 文件系统&#xff0c;常见的文件系统有 ext2…

本地线程分配缓冲_线程本地分配缓冲区

本地线程分配缓冲最近&#xff0c;我一直在研究遭受严重性能问题的Java应用程序。 在许多问题中&#xff0c;真正引起我注意的一个问题是新对象的分配速度相对较慢&#xff08;应用程序分配了大量的相当大的对象&#xff09;。 后来发现&#xff0c;原因是大量的分配发生在TLAB…