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