【问题标题】:Java JUnit 5 annotations differencesJava JUnit 5 注释差异
【发布时间】:2018-07-28 22:18:19
【问题描述】:

我看到有根据JUnit 5 User Guide介绍了新的JUnit Jupiter。

JUnit 5 = JUnit 平台 + JUnit Jupiter + JUnit Vintage

我对在整个库中使用的同名注释感到困惑。这两者有什么明显的区别吗?

  • org.junit.Test
  • org.junit.jupiter.api.Test

上面链接页面的描述解释了注释org.junit.jupiter.api.Test如下:

表示一个方法是一个测试方法。与 JUnit 4 的 @Test 注解不同,此注解不声明任何属性,因为 JUnit Jupiter 中的测试扩展基于它们自己的专用注解进行操作。除非被覆盖,否则此类方法会被继承。

据我了解,主要区别在于新的注释属性被替换为专用的注释和方法(例如assertTimeout(...)),这与旧的@Test(timeout = 1000) 不同。

文档谈到了 JUnit 4 中的旧注释 org.junit.Test,但是,并没有清楚地解释版本 JUnit 5 中相同注释的用途,令我惊讶的是,它没有标记为 @Deprecated - 它意味着在 JUnit 5 中仍然有使用此注释的目的,对吗?

我的问题是 JUnit 5 中 org.junit.Test 的用途是什么,为什么它不被弃用,以及我在上述两个注释之间的选择应该基于什么。

【问题讨论】:

标签: java unit-testing junit junit5 junit-jupiter


【解决方案1】:

org.junit.Test 在 JUnit5 中不是,该类是由您对 JUnit Vintage 的依赖提供的。

JUnit Vintage 包括 JUnit Vintage 测试引擎和 org.junit.Test 等类,这允许您在运行 JUnit5 测试的同时运行 JUnit4 测试。这是一种向后兼容的措施。

如果您想使用 JUnit5 构造(并将 JUnit4 排除在您的项目之外),那么只需放弃对 JUnit Vintage 的依赖并专注于 org.junit.jupiter.api.Test

如果您需要并行运行 JUnit4 和 JUnit5 测试(可能在迁移/切换期间),则保留对 JUnit Vintage 的依赖,但使用 org.junit.jupiter.api.Test 编写所有新测试用例。

更新:针对此...

我仍然不明白为什么 org.junit.Test 不被弃用。

它在 JUnit Jupiter 中根本不存在(所以弃用没有实际意义),它在 JUnit Vintage 中也不被弃用,因为它是 JUnit Vintage 的核心元素。但是,我想我可以看到您来自哪里;您升级到 JUnit5 并且 - 令人困惑的是 - 在没有 @Deprecated 的情况下,org.junit.Test 在您的类路径中仍然可用,因此没有明确指示其“不使用”状态。也许您应该考虑在运行 JUnit5 时是否需要/需要任何支持的 JUnit4 构造。如果你不需要它,那么就不要包含对 JUnit Vintage 的依赖,它就像org.junit.Test 从未存在过。

【讨论】:

  • 谢谢,我现在清楚一点了。但我仍然不明白为什么 org.junit.Test 不被弃用。
  • 是的,当我第一次升级到 JUnit5 时,我也有类似的想法。但是,当时我进行了从 JUnit4 到 JUnit5 的完全迁移,所以我不需要任何 JUnit4 构造。这使我能够删除对 JUnit Vintage 的依赖,因此 JUnit4 命名空间(包括 org.junit.Test)不再可用。
猜你喜欢
  • 2019-02-03
  • 2019-03-04
  • 1970-01-01
  • 2018-12-03
  • 2018-09-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多