Java 两个JUnit断言类之间的差异
JUnit框架包含2个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版以
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类可能是一个好主意,因为它较新,稍加重写,可能意味着作为替换。