2008-11-14 86 views
234

JUnit框架包含2个Assert类(很明显,在不同的包中),并且每个类的方法看起来非常相似。任何人都可以解释为什么这是?2个JUnit Assert类之间的区别

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

+7

在Intellij IDEA中,您可以从Editor-> General-> Auto Import-> Import and Completion中的静态导入下拉列表中排除`junit.framework。*`。 – jordanpg 2015-08-14 14:03:28

回答

221

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

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

import static org.junit.Assert.*; 

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

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

+5

这个答案不完全正确,你可以在类junit.framework.Assert和org.junit.Assert中静态导入方法。然而,坚持org.junit.Assert类可能是一个好主意,因为它更新,稍作重写,可能意味着作为替代品。 – 2015-11-30 09:51:44

5

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

68

的JUnit 3.X:junit.framework.Assert

JUnit的4.X:org.junit.Assert

不想最新的一个,尤其是运行时JDK5与注释支持更高。

3

我做了一个粗略的源代码比较,没有发生严重的变化。在org.junit.Assert中添加了很多评论,并且完成了一些重构。唯一的变化是与Arrays的比较。有一些代码清理,但有(imho)没有功能变化

+1

我相信@戴维痣是正确的,这将是一个功能上的改变。 – orbfish 2013-09-18 16:54:57

17

其实也有功能性改变:org.junit.Assert会抱怨,如果你使用的两个参数assertEquals()floatdouble,而junit.framework.Assert会默默地autobox它。