JUnit框架包含2个Assert
类(很明显,在不同的包中),并且每个类的方法看起来非常相似。任何人都可以解释为什么这是?2个JUnit Assert类之间的区别
我指的是:junit.framework.Assert
和org.junit.Assert
。
JUnit框架包含2个Assert
类(很明显,在不同的包中),并且每个类的方法看起来非常相似。任何人都可以解释为什么这是?2个JUnit Assert类之间的区别
我指的是:junit.framework.Assert
和org.junit.Assert
。
旧方法(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类可能是一个好主意,因为它更新,稍作重写,可能意味着作为替代品。 – 2015-11-30 09:51:44
我相信他们正在重构从junit.framework
到org.junit
和junit.framework.Assert
保持向后兼容性。
的JUnit 3.X:junit.framework.Assert
JUnit的4.X:org.junit.Assert
不想最新的一个,尤其是运行时JDK5与注释支持更高。
我做了一个粗略的源代码比较,没有发生严重的变化。在org.junit.Assert
中添加了很多评论,并且完成了一些重构。唯一的变化是与Arrays
的比较。有一些代码清理,但有(imho)没有功能变化。
我相信@戴维痣是正确的,这将是一个功能上的改变。 – orbfish 2013-09-18 16:54:57
其实也有功能性改变:org.junit.Assert
会抱怨,如果你使用的两个参数assertEquals()
与float
或double
,而junit.framework.Assert
会默默地autobox它。
在Intellij IDEA中,您可以从Editor-> General-> Auto Import-> Import and Completion中的静态导入下拉列表中排除`junit.framework。*`。 – jordanpg 2015-08-14 14:03:28