两个JUnit Assert类之间的区别

266

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

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


8
在Intellij IDEA中,您可以在编辑器->常规->自动导入->从导入和补全中排除中从静态导入下拉菜单中排除 junit.framework.* - jordanpg
6个回答

249

旧的JUnit 3方法是通过扩展 junit.framework.TestCase 来标记测试类。这样继承了 junit.framework.Assert,你的测试类就可以通过这种方式调用 assert 方法。

JUnit 4 版本以后,框架使用 注解 来标记测试。因此,你不再需要扩展 TestCase。但这也意味着 assert 方法不再可用。不过你可以静态导入新的 Assert 类,所有新类中的 assert 方法都是静态方法。所以你可以这样导入它:

import static org.junit.Assert.*;

在进行静态导入之后,您可以直接使用这些方法而无需添加前缀。

在重新设计中,他们还将其移动到新包org.junit,该包遵循更好的包命名规范。


6
这个答案并不完全正确,你可以在 junit.framework.Assert 和 org.junit.Assert 这两个类中进行静态方法的导入。然而,最好还是使用 org.junit.Assert 类,因为它比较新,稍微有些改动,可能会成为替代品。 - Glenn Bech

81

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

如果您使用JDK5及以上版本并支持注解,请优先选择最新的JUnit版本。


21

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


5

我相信他们正在从junit.framework重构到org.junit,而junit.framework.Assert保持向后兼容性。


3
在Android Studio(以及IntelliJ中),你可以在自动导入建议中全局排除junit.framework
你可以将范围设置为IDEProject。如果您没有使用JUnit 3的项目,可以安全地保留IDE范围。
设置位置:

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

enter image description here


2
我进行了一次粗略的源代码比较,没有发现重大变化。在org.junit.Assert中添加了很多注释,并进行了一些重构。唯一的变化是与Arrays的比较。有一些代码清理,但(在我看来)没有功能性的改变

1
我相信@David Moles是正确的,这将是一个功能性的变化。 - orbfish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接