2个JUnit Assert类之间的区别

JUnit框架包含2个Assert类(显然在不同的包中),每个类上的方法看起来非常相似。有人能解释一下这是为什么吗?

我所指的类是:junit.framework.Assertorg.junit.Assert

39946 次浏览

我相信他们正在从junit.framework重构到org.junit,并且为了向后兼容而维护了junit.framework.Assert

(JUnit 3的)旧方法是通过扩展junit.framework.TestCase来标记测试类。它继承了junit.framework.Assert本身,并且您的测试类获得了以这种方式调用assert方法的能力。

从JUnit的第4版开始,框架使用Annotations来标记测试。所以你不再需要扩展TestCase。但这意味着assert方法不可用。但是你可以对新的Assert类进行静态导入。这就是为什么新类中的所有assert方法都是静态方法。所以你可以这样导入它:

import static org.junit.Assert.*;

在此静态导入之后,您可以不带前缀地使用此方法。

在重新设计时,他们也移动到新的包org.junit,它更好地遵循包命名的正常约定。

JUnit 3。X: junit.framework.Assert

JUnit 4。X: org.junit.Assert

最好使用最新的版本,特别是在运行带有注释支持的JDK5或更高版本时。

我做了一个粗略的源代码比较,没有严重的变化。在org.junit.Assert中添加了大量注释,并完成了一些重构。唯一的变化是与Arrays的比较。有一些代码清理,但有(恕我直言)没有功能变化

实际上有一个功能上的改变:如果你使用双参数assertEquals()floatdoubleorg.junit.Assert会报错,而junit.framework.Assert会默默地自动装箱它。

在Android Studio中(在IntelliJ中也是如此),你可以全局地从自动导入提议中排除junit.framework

可以在IDEProject之间设置作用域。如果你没有使用JUnit 3的项目,你可以安全地使用IDE作用域。

设置位置:

首选项->编辑器->通用->自动导入

enter image description here