junit junit_穿越JUnit流
junit junit
关于JUnit 5迁移的好处之一是,您可以在老式模式下运行JUnit 4测试,并且所有内容仍然兼容。 不利的一面是,某些注释和方法在JUnit 4和JUnit 5中具有相同的名称,并且当两组库依赖项都可用时,很容易导入错误的内容并生成不符合要求的测试。努力工作。
然而,更糟糕的是,当没有意义的测试也没有通过构建时。
考虑以下测试:
import org.junit.Test; import org.junit.jupiter.api.BeforeEach; import static org.junit.Assert.assertEquals; public class AccidentalJUnit4Test { @BeforeEach public void beforeEach() { } @Test public void test() { assertEquals( 1 , 1 ); } }
这是JUnit 5的注释和JUnit 4的可怕的汤。 它在IDE中运行,但是在maven构建中,它被忽略,因为@Test
来自错误的JUnit,并且我没有运行junit-vintage
。
那么运行junit-vintage
吗?
这是怎么发生的?
就我而言,我已经导入了JUnit 5的TestContainers
集成,该集成具有对JUnit 4的传递依赖。这不是很好,但这还不是末日。 但是,我只想在代码中使用JUnit 5测试,但是我可能会意外地用JUnit 4位编写测试,没有人会注意到!
这些一半形式的测试从未打算如此,因此我希望它们使构建失败。
什么不起作用
- Checkstyle – checkstyle可以扫描禁止的
import
语句,但是我不使用它进行src/test
扫描,并且我们项目的checkstyle规则与另一个使用junit-vintage
的有效项目共享。 - Macker –复杂的扫描仪,似乎没有开箱即用的答案
- Enforcer –这将阻止我包括JUnit 4依赖项…除了我忍不住允许
我为什么要在乎?
通过添加自动化功能来发现已知错误并告诉您有关错误的信息,这比在周围发出警告要好得多,而且仍然可能出现错误,从而使事情防错。
就像有人张贴标语来警告该水非常热,而不是在合适的温度下提供水一样!
任何可以赋予我们强制功能的东西都是有好处的。
什么有效
我在GitHub上找到了一个愚蠢而简单的答案。
这个Maven Grep插件效果很好:
< build > < plugins > <!-- grep maven plugin set to filter naughty JUnit4 stuff --> < plugin > < groupId >net.radai</ groupId > < artifactId >grep-maven-plugin</ artifactId > < version >1.1</ version > < executions > < execution > < goals > < goal >grep</ goal > </ goals > < phase >test</ phase > < configuration > < greps > < grep > < failIfFound >true</ failIfFound > < filePattern >src/test/java/**/*.java</ filePattern > < grepPattern >import\s+(static\s+)?org\.junit\.(Assert|Test|Before|After|AfterClass|Assume|BeforeClass|ClassRule|Rule|FixMethodOrder|Ignore|Rule)</ grepPattern > < outputPattern >Found JUnit 4 imports in file ${fileName} at line ${lineNumber} : ${line}</ outputPattern > </ grep > </ greps > </ configuration > </ execution > </ executions > </ plugin > </ plugins > </ build > <!-- you also need to add the distribution repo --> < pluginRepositories > < pluginRepository > < id >ossrh</ id > < url > https://oss.sonatype.org/content/groups/public </ url > </ pluginRepository > </ pluginRepositories >
上面的内容对我有用,可以防止发生错误,它可能对您有用。
我在GitHub中放置了上述代码的一个工作示例(由于正确的原因而失败)。
信用到期
我几乎放弃了上述问题。 幸运的是,开源社区非常出色。
Radai Rosenblatt于2016年编写了此插件。一个名为Michal Lozinski的撰稿人于2017年添加了文件模式扫描。
当我们初次尝试使用上述配置时,它不起作用。 文档没有描述如何执行此操作,但是阅读插件的代码显示可以使用filePattern
。 但是,它没有用。
我今天联系了Radai,他更新了该插件的发行版,现在可以使用了。
没有开源,这将是不可能的。 没有作者承担对陌生人的帮助的责任,这是不可能的。
谢谢!!!
翻译自: https://www.javacodegeeks.com/2019/08/crossing-junit-streams.html
junit junit
junit junit_穿越JUnit流相关推荐
- junit junit_使用junit做其他事情
junit junit junit!=单元测试 Junit是Java单元测试框架. 通常,我们将它用于单元测试,但是很多时候我们也使用它来执行集成测试. 主要区别在于,单元测试测试单个单元,而集成测试 ...
- junit:junit_处理JUnit中异常的另一种方法:catch-exception
junit:junit JUnit中有许多处理异常的方法 (JUnit中有3种处理异常的方法.选择哪一种? JUnit ExpectedException规则:超越了基础 ). 在这篇文章中,我将介绍 ...
- junit runner_了解JUnit的Runner架构
junit runner 几周前,我开始创建一个小的JUnit Runner( Oleaster ),它允许您使用Jasmine方式在JUnit中编写单元测试. 我了解到,创建自定义JUnit Run ...
- JUnit 5 –下一代JUnit的初步了解
2月初, JUnit 5(又名JUnit Lambda)团队发布了一个alpha版本. 由于JUnit 4是我工具箱中使用最频繁的项目之一,因此我认为值得一看下一个主要版本. 我试用了最新版本,并记下 ...
- JUnit 4 与 JUnit 3
JUnit 是 Java? 语言事实上的 标准单元测试库.JUnit 4 是该库三年以来最具里程碑意义的一次发布.它的新特性主要是通过采用 Java 5 中的标记(annotation)而不是利用子类 ...
- JUnit 4和JUnit 5区别
特征 JUNIT 4 JUNIT 5 声明一种测试方法 @Test @Test 在当前类中的所有测试方法之前执行 @BeforeClass @BeforeAll 在当前类中的所有测试方法之后执行 @A ...
- maven安装junit_JUnit安装Maven – JUnit 4和JUnit 5
maven安装junit JUnit 4 and JUnit 5 are completely different frameworks. They both serve the same purpo ...
- junit5和junit4_JUnit声明异常– JUnit 5和JUnit 4
junit5和junit4 We can test expected exceptions using JUnit 5 assertThrows assertion. This JUnit asser ...
- java 计算器 junit测试_Java Junit测试
使用junit做测试目的是尽量早的发现程序的bug,一个bug隐藏的时间越久,修复他的代价就越大. 1.Junit简介: Junit最初是由Erich Gamma 和 Kent Beck 编写的一个回 ...
最新文章
- Xshell配置ssh使用密钥公钥(publice key)登录
- 拼多多暴跌的原因找到了
- grep检索关键字的命令_linux系统中java线上问题常用排查命令
- avro和java原生序列化的区别,java原生序列化和Kryo序列化性能比较
- 小程序生成二维码报错:40169:invalid length for scene, or the data is not json string
- 语言求余和乘除优先级_愉快地学Java语言:第二章基本程序设计 第2讲
- ttribute value is quoted with which must be escaped when used within the value
- 腾讯安全发布十大产业互联网安全议题:聚焦5G、数据加密等
- vfp体积计算机程序,浙江省计算机2级VFP程序调试真题集.doc
- Jquery学习总结(5)——jQuery选择器
- 启动tomcat控制台日志出现乱码怎么办?
- gimp 架构_常见GUI 框架
- Jquery 查看DOM上绑定的事件列表
- Python——集合运算
- 计算机驱动有必要更新,电脑各硬件驱动程序是否越新越好?需要经常更新驱动程序吗?...
- 提高工作效率的工具[分享]
- 集总参数电路抽象---线性电路叠加定理理解
- 波浪下划线怎么设置_如何在word中的文字下面加波浪线
- Python numpy实现二维数组和一维数组拼接
- 计算机读不了硬盘分区,电脑开机后读不到硬盘怎么办
热门文章
- 牛客题霸 [字符串的排列] C++题解/答案
- P7854-「EZEC-9」GCD Tree【构造】
- 51nod1601-完全图的最小生成树计数【Trie,分治】
- P3690-[模板]Link Cut Tree(动态树)【Splay】
- SpringBoot2.1.9 多Redis Lettuce配置
- Hadoop生态hive(五)Hive QL数据库
- 漫画:什么是优先队列
- art-template 入门(二)之安装
- 零配置 之Spring基于Java类定义Bean配置元数据
- DevOps到底是什么鬼?DevOps介绍及工具推荐