JUnit框架包含2个Assert
类(显然在不同的包中),每个类的方法看起来非常相似。任何人都可以解释为什么会这样吗?
我所指的课程是:junit.framework.Assert
和org.junit.Assert
。
答案 0 :(得分:234)
旧方法(JUnit 3)是通过扩展junit.framework.TestCase
来标记测试类。这继承了junit.framework.Assert
本身,你的测试类获得了以这种方式调用assert方法的能力。
从JUnit的第4版开始,框架使用Annotations
来标记测试。因此,您不再需要扩展TestCase
。但这意味着,断言方法不可用。但是您可以静态导入新的Assert
类。这就是为什么新类中的所有断言方法都是静态方法的原因。所以你可以这样导入它:
import static org.junit.Assert.*;
执行此静态导入后,您可以使用此方法而不使用前缀。
在重新设计时,他们也转移到新包org.junit
,它更符合包命名的常规约定。
答案 1 :(得分:73)
JUnit 3.X:junit.framework.Assert
JUnit 4.X:org.junit.Assert
首选最新版本,尤其是在运行带有注释支持的JDK5及更高版本时。
答案 2 :(得分:19)
实际上存在功能变化:如果您使用org.junit.Assert
与assertEquals()
或float
同时使用double
,junit.framework.Assert
将会抱怨默默地自动装箱。
答案 3 :(得分:5)
我认为他们正在重构junit.framework
到org.junit
,并且junit.framework.Assert
是为了向后兼容而维护的。
答案 4 :(得分:3)
我做了粗略的源代码比较,并没有发生严重的变化。在org.junit.Assert
中添加了很多评论,并且完成了一些重构。唯一的变化是与Arrays
的比较。有一些代码清理,但有(imho)没有功能改变。
答案 5 :(得分:0)