Java 两个JUnit断言类之间的差异

Java 两个JUnit断言类之间的差异,java,unit-testing,junit,junit4,assert,Java,Unit Testing,Junit,Junit4,Assert,JUnit框架包含2个Assert类(显然在不同的包中),每个类上的方法看起来非常相似。有人能解释为什么会这样吗 我所指的类是:和。我相信它们正在从junit.framework重构到org.junit,并且维护junit.framework.Assert是为了向后兼容 JUnit3的旧方法是通过扩展JUnit.framework.TestCase来标记测试类。它继承了junit.framework.Assert本身,并且您的测试类获得了以这种方式调用Assert方法的能力 自JUnit第4版以

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


我所指的类是:和。

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

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

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

import static org.junit.Assert.*;
在这个静态导入之后,您可以使用这个不带前缀的方法


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

junit3.X:
junit.framework.Assert

JUnit4.X:
org.JUnit.Assert


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

我对源代码进行了粗略的比较,没有重大的更改。在
org.junit.Assert
中添加了大量注释,并进行了一些重构。唯一的变化是与
数组的比较。有一些代码清理,但有(imho)没有功能更改事实上有一个功能更改:
org.junit.Assert
如果将两个参数
assertEquals()
float
double
一起使用,则会抱怨,而
junit.framework.Assert
将自动装箱。

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

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

设置位置:

首选项->编辑器->常规->自动导入


我相信@David Moles是正确的,这将是一个功能性的改变。在Intellij IDEA中,您可以从
编辑器->常规->自动导入->导入和完成时排除
的静态导入下拉列表中排除
junit.framework.
。这个答案并不完全正确,您可以在类junit.framework.Assert和org.junit.Assert中静态导入方法。然而,坚持使用org.junit.Assert类可能是一个好主意,因为它较新,稍加重写,可能意味着作为替换。