2个JUnit声明类之间的区别


257

JUnit框架包含2个Assert类(显然是在不同的程序包中),每个类的方法似乎非常相似。有人可以解释为什么吗?

我要参考的类是:junit.framework.Assertorg.junit.Assert


8
在Intellij IDEA中,您可以junit.framework.*从中的静态导入下拉列表中排除Editor->General->Auto Import->Exclude from Import and Completion
jordanpg

Answers:


239

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

从JUnit版本4开始,该框架Annotations用于标记测试。因此,您不再需要扩展TestCase。但这意味着,断言方法不可用。但是您可以静态导入新Assert类。这就是为什么新类中的所有assert方法都是静态方法的原因。因此,您可以通过以下方式导入它:

import static org.junit.Assert.*;

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

在重新设计时,他们还迁移到了新的软件包org.junit,该软件包更好地遵循了软件包命名的常规约定。


6
这个答案并不完全正确,您可以在类junit.framework.Assert和org.junit.Assert中进行静态方法导入。但是,坚持使用org.junit.Assert类可能是一个好主意,因为它是较新的,经过稍微重写的并且可能是替代品。
Glenn Bech 2015年

75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

最好使用最新版本,尤其是在运行具有注释支持的JDK5及更高版本时。


19

实际上是一个功能上的更改:org.junit.Assert如果将两个参数assertEquals()float或一起使用,则会抱怨double,而junit.framework.Assert将自动将其自动装箱。


5

我相信它们是从junit.framework进行重构的,org.junitjunit.framework.Assert保持了向后兼容性。


3

我做了一个粗略的源代码比较,没有任何重大变化。添加了很多注释,org.junit.Assert并完成了一些重构。唯一的变化是与的比较Arrays。进行了一些代码清除,但没有任何功能更改


1
我相信@David Moles是正确的,这将是功能上的改变。
orbfish

1

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

您可以在IDE或之间设置范围Project。如果您没有使用JUnit 3的项目,则可以放心使用IDE范围。

设定位置:

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

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.