262

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

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

4

6 回答 6

244

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

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

import static org.junit.Assert.*;

在此静态导入之后,您可以使用此方法而无需前缀。

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

于 2008-11-14T19:04:31.107 回答
77

JUnit 3.X:junit.framework.Assert

JUnit 4.X:org.junit.Assert

首选最新版本,尤其是在运行带有注释支持的 JDK5 及更高版本时。

于 2008-11-14T19:19:07.800 回答
21

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

于 2009-07-31T08:56:47.997 回答
5

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

于 2008-11-14T19:00:35.857 回答
2

我做了一个粗略的源代码比较,没有严重的变化。添加了很多评论,org.junit.Assert并进行了一些重构。唯一的变化是与 的比较Arrays。有一些代码清理,但(恕我直言)没有功能变化

于 2009-05-28T08:56:44.260 回答
2

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

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

设置位置:

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

在此处输入图像描述

于 2019-02-21T13:44:57.583 回答