19

我看到根据JUnit 5 User Guide介绍了新的 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).

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

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

4

1 回答 1

18

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

于 2018-02-18T18:21:26.363 回答