Java JUnit 5 注释的差异

我看到根据JUnit 5用户指南引入了新的JUnit Jupiter。

JUnit 5 = JUnit Platform + 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的旧注释,但是,并没有清楚地解释JUnit 5版本中相同注释的目的,这让我感到惊讶的是没有标记为 - 这意味着在JUnit 5中使用此注释仍然有目的,我是对的吗?org.junit.Test@Deprecated

我的问题是JUnit 5的目的是什么,为什么它没有被弃用,以及我应该基于上面提到的两个注释之间的选择。org.junit.Test


答案 1

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

JUnit Vintage 包括 JUnit Vintage 测试引擎和类,例如 ,这允许您将 JUnit4 测试与 JUnit5 测试一起运行。它是一种反向兼容性度量。org.junit.Test

如果您只想使用 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 并且 - 令人困惑的是 - 在您的类路径上仍然可用,因此没有明确指示其“不使用”状态。也许你应该考虑一下,在运行 JUnit5 时,你是否想要/需要任何受支持的 JUnit4 构造。如果你不需要它,那么就不要包含对JUnit Vintage的依赖,它将就像从未存在过一样。org.junit.Test@Deprecatedorg.junit.Test


答案 2

推荐