关于java:2个JUnit Assert类之间的差异

differences between 2 JUnit Assert classes

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

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


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

自JUnit第4版以来,框架使用Annotations标记测试。所以您不再需要扩展TestCase。但这意味着断言方法不可用。但是您可以对新的Assert类进行静态导入。这就是新类中所有断言方法都是静态方法的原因。因此可以通过以下方式导入:

1
import static org.junit.Assert.*;

在这个静态导入之后,可以使用不带前缀的方法。

在重新设计时,他们还转向新的包org.junit,该包遵循更好的包命名常规。


6月3日x:junit.framework.Assert

6月4日x:org.junit.Assert

更喜欢最新的版本,尤其是在运行带有注释支持的JDK5和更高版本时。


实际上有一个功能上的改变:如果你用assertEquals()floatdouble这两个参数,org.junit.Assert会抱怨,而junit.framework.Assert会悄悄地自动装箱。


我相信它们是从junit.frameworkorg.junit的重构,junit.framework.Assert是为了向后兼容而维护的。


我做了一个粗略的源代码比较,没有严重的变化。在org.junit.Assert中添加了许多注释,并进行了一些重构。唯一的变化是与Arrays的比较。有一些代码清理,但没有(imho)功能更改。


在android studio中(在intellij中也是如此),您可以在全球范围内从自动导入建议中排除junit.framework

您可以在IDEProject之间设置范围。如果没有使用JUnit3的项目,可以安全地使用IDE范围。

设置位置:

Preferences -> Editor -> General -> Auto Import

enter image description here