2 个 JUnit 断言类之间的差异

Posted

技术标签:

【中文标题】2 个 JUnit 断言类之间的差异【英文标题】:differences between 2 JUnit Assert classes 【发布时间】:2010-09-22 09:42:03 【问题描述】:

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

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

【问题讨论】:

在 Intellij IDEA 中,您可以从 Editor->General->Auto Import->Exclude from Import and Completion 的静态导入下拉列表中排除 junit.framework.* 【参考方案1】:

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

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

import static org.junit.Assert.*;

在这个静态导入之后,你可以使用这个不带前缀的方法。

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

【讨论】:

这个答案并不完全正确,您可以对 junit.framework.Assert 和 org.junit.Assert 类中的方法进行静态导入。然而,坚持使用 org.junit.Assert 类可能是一个好主意,因为它更新,稍微重写并且可能意味着作为替代品。【参考方案2】:

JUnit 3.X:junit.framework.Assert

JUnit 4.X:org.junit.Assert

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

【讨论】:

【参考方案3】:

实际上有一个功能变化:如果您使用两个参数 assertEquals()floatdoubleorg.junit.Assert 会报错,而 junit.framework.Assert 会默默地自动装箱。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

我相信@David Moles 是正确的,这将是功能上的改变。【参考方案6】:

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

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

设置位置:

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

【讨论】:

以上是关于2 个 JUnit 断言类之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

Junit 单元测试

断言与JUnit断言

Junit ant 任务未将断言错误报告为失败

10.Android UiAutomator Junit 断言函数的使用

SpringBoot2---单元测试(Junit5)

SpringBoot JUnit4的断言