JUnit 框架包含 2 个Assert
类(显然在不同的包中),每个类的方法看起来都非常相似。谁能解释这是为什么?
6 回答
(JUnit 3 的)旧方法是通过扩展来标记测试类junit.framework.TestCase
。它继承了junit.framework.Assert
自己,并且您的测试类获得了以这种方式调用断言方法的能力。
从 JUnit 版本 4 开始,该框架Annotations
用于标记测试。所以你不再需要扩展TestCase
. 但这意味着,断言方法不可用。但是您可以对新Assert
类进行静态导入。这就是为什么新类中的所有断言方法都是静态方法的原因。所以你可以这样导入它:
import static org.junit.Assert.*;
在此静态导入之后,您可以使用此方法而无需前缀。
在重新设计时,他们还迁移到了新的包org.junit
,该包更好地遵循了包命名的正常约定。
JUnit 3.X:junit.framework.Assert
JUnit 4.X:org.junit.Assert
首选最新版本,尤其是在运行带有注释支持的 JDK5 及更高版本时。
实际上有一个功能上的改变:org.junit.Assert
如果你使用assertEquals()
带有float
or的两个参数会抱怨double
,而junit.framework.Assert
会默默地自动装箱。
我相信他们正在从junit.framework
to重构org.junit
并junit.framework.Assert
保持向后兼容性。
我做了一个粗略的源代码比较,没有严重的变化。添加了很多评论,org.junit.Assert
并进行了一些重构。唯一的变化是与 的比较Arrays
。有一些代码清理,但(恕我直言)没有功能变化。