JUnit框架包含2个Assert类(显然是在不同的包中),每个类上的方法看起来非常相似。有人能解释这是为什么吗?
我指的是:junit.framework.Assert和org.junit.Assert。
- 在intellij思想中,可以将junit.framework.*从Editor->General->Auto Import->Exclude from Import and Completion中的静态导入下拉列表中排除。
旧方法(JUnit3)是通过扩展junit.framework.TestCase来标记测试类。它继承了junit.framework.Assert本身,并且您的测试类获得了这样调用断言方法的能力。
自JUnit第4版以来,框架使用Annotations标记测试。所以您不再需要扩展TestCase。但这意味着断言方法不可用。但是您可以对新的Assert类进行静态导入。这就是新类中所有断言方法都是静态方法的原因。因此可以通过以下方式导入:
1
| import static org.junit.Assert.*; |
在这个静态导入之后,可以使用不带前缀的方法。
在重新设计时,他们还转向新的包org.junit,该包遵循更好的包命名常规。
- 这个答案并不完全正确,您可以静态导入类junit.framework.assert和org.junit.assert中的方法。然而,坚持使用org.junit.assert类可能是一个好主意,因为它是更新的、稍微重写的,并且可能意味着作为替换。
6月3日x:junit.framework.Assert。
6月4日x:org.junit.Assert。
更喜欢最新的版本,尤其是在运行带有注释支持的JDK5和更高版本时。
实际上有一个功能上的改变:如果你用assertEquals()和float或double这两个参数,org.junit.Assert会抱怨,而junit.framework.Assert会悄悄地自动装箱。
我相信它们是从junit.framework到org.junit的重构,junit.framework.Assert是为了向后兼容而维护的。
我做了一个粗略的源代码比较,没有严重的变化。在org.junit.Assert中添加了许多注释,并进行了一些重构。唯一的变化是与Arrays的比较。有一些代码清理,但没有(imho)功能更改。
- 我相信@david moles是正确的,这将是一个功能性的改变。
在android studio中(在intellij中也是如此),您可以在全球范围内从自动导入建议中排除junit.framework。
您可以在IDE或Project之间设置范围。如果没有使用JUnit3的项目,可以安全地使用IDE范围。
设置位置:
Preferences -> Editor -> General -> Auto Import