Java JUnit 5批注的区别

Nik*_*las 6 java junit unit-testing junit5 junit-jupiter

我看到根据《JUnit 5用户指南》引入了新的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)

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

我的问题是org.junit.TestJUnit 5中的目的是什么,为什么不建议不使用它,以及我应该根据上述两个注释之间的选择做出选择。

gly*_*ing 7

org.junit.Test不是在JUnit5,这个类是由JUnit的复古你的依赖提供。

JUnit Vintage包含JUnit Vintage测试引擎和诸如之类的类 org.junit.Test,这使您可以将JUnit4测试与JUnit5测试一起运行。这是一种向后兼容的措施。

如果您想使用 JUnit5结构(离开JUnit4你的项目),那么刚落,JUnit的复古的依赖,注重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从未存在一样。