2 个 JUnit 断言类之间的差异
Posted
技术标签:
【中文标题】2 个 JUnit 断言类之间的差异【英文标题】:differences between 2 JUnit Assert classes 【发布时间】:2010-09-22 09:42:03 【问题描述】:JUnit 框架包含 2 个Assert
类(显然在不同的包中),每个类的方法看起来都非常相似。谁能解释这是为什么?
我指的类是:junit.framework.Assert
和 org.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()
和 float
或 double
,org.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
。
您可以在IDE
或Project
之间设置范围。如果您没有使用 JUnit 3 的项目,您可以放心地使用 IDE 范围。
设置位置:
首选项 -> 编辑器 -> 常规 -> 自动导入
【讨论】:
以上是关于2 个 JUnit 断言类之间的差异的主要内容,如果未能解决你的问题,请参考以下文章