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流相关推荐

  1. junit junit_使用junit做其他事情

    junit junit junit!=单元测试 Junit是Java单元测试框架. 通常,我们将它用于单元测试,但是很多时候我们也使用它来执行集成测试. 主要区别在于,单元测试测试单个单元,而集成测试 ...

  2. junit:junit_处理JUnit中异常的另一种方法:catch-exception

    junit:junit JUnit中有许多处理异常的方法 (JUnit中有3种处理异常的方法.选择哪一种? JUnit ExpectedException规则:超越了基础 ). 在这篇文章中,我将介绍 ...

  3. junit runner_了解JUnit的Runner架构

    junit runner 几周前,我开始创建一个小的JUnit Runner( Oleaster ),它允许您使用Jasmine方式在JUnit中编写单元测试. 我了解到,创建自定义JUnit Run ...

  4. JUnit 5 –下一代JUnit的初步了解

    2月初, JUnit 5(又名JUnit Lambda)团队发布了一个alpha版本. 由于JUnit 4是我工具箱中使用最频繁的项目之一,因此我认为值得一看下一个主要版本. 我试用了最新版本,并记下 ...

  5. JUnit 4 与 JUnit 3

    JUnit 是 Java? 语言事实上的 标准单元测试库.JUnit 4 是该库三年以来最具里程碑意义的一次发布.它的新特性主要是通过采用 Java 5 中的标记(annotation)而不是利用子类 ...

  6. JUnit 4和JUnit 5区别

    特征 JUNIT 4 JUNIT 5 声明一种测试方法 @Test @Test 在当前类中的所有测试方法之前执行 @BeforeClass @BeforeAll 在当前类中的所有测试方法之后执行 @A ...

  7. 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 ...

  8. junit5和junit4_JUnit声明异常– JUnit 5和JUnit 4

    junit5和junit4 We can test expected exceptions using JUnit 5 assertThrows assertion. This JUnit asser ...

  9. java 计算器 junit测试_Java Junit测试

    使用junit做测试目的是尽量早的发现程序的bug,一个bug隐藏的时间越久,修复他的代价就越大. 1.Junit简介: Junit最初是由Erich Gamma 和 Kent Beck 编写的一个回 ...

最新文章

  1. Xshell配置ssh使用密钥公钥(publice key)登录
  2. 拼多多暴跌的原因找到了
  3. grep检索关键字的命令_linux系统中java线上问题常用排查命令
  4. avro和java原生序列化的区别,java原生序列化和Kryo序列化性能比较
  5. 小程序生成二维码报错:40169:invalid length for scene, or the data is not json string
  6. 语言求余和乘除优先级_愉快地学Java语言:第二章基本程序设计 第2讲
  7. ttribute value is quoted with which must be escaped when used within the value
  8. 腾讯安全发布十大产业互联网安全议题:聚焦5G、数据加密等
  9. vfp体积计算机程序,浙江省计算机2级VFP程序调试真题集.doc
  10. Jquery学习总结(5)——jQuery选择器
  11. 启动tomcat控制台日志出现乱码怎么办?
  12. gimp 架构_常见GUI 框架
  13. Jquery 查看DOM上绑定的事件列表
  14. Python——集合运算
  15. 计算机驱动有必要更新,电脑各硬件驱动程序是否越新越好?需要经常更新驱动程序吗?...
  16. 提高工作效率的工具[分享]
  17. 集总参数电路抽象---线性电路叠加定理理解
  18. 波浪下划线怎么设置_如何在word中的文字下面加波浪线
  19. Python numpy实现二维数组和一维数组拼接
  20. 计算机读不了硬盘分区,电脑开机后读不到硬盘怎么办

热门文章

  1. 牛客题霸 [字符串的排列] C++题解/答案
  2. P7854-「EZEC-9」GCD Tree【构造】
  3. 51nod1601-完全图的最小生成树计数【Trie,分治】
  4. P3690-[模板]Link Cut Tree(动态树)【Splay】
  5. SpringBoot2.1.9 多Redis Lettuce配置
  6. Hadoop生态hive(五)Hive QL数据库
  7. 漫画:什么是优先队列
  8. art-template 入门(二)之安装
  9. 零配置 之Spring基于Java类定义Bean配置元数据
  10. DevOps到底是什么鬼?DevOps介绍及工具推荐