JUnit框架包含2个Assert类(显然是在不同的包中),每个类上的方法看起来非常相似。有人能解释一下这是为什么吗?

我引用的类是:junit.framework.Assert和org.junit.Assert。


当前回答

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

从JUnit的第4版开始,框架使用注解来标记测试。因此您不再需要扩展TestCase。但这意味着assert方法不可用。但是您可以对新的Assert类进行静态导入。这就是为什么新类中的所有assert方法都是静态方法。所以你可以这样导入它:

import static org.junit.Assert.*;

在此静态导入之后,您可以不带前缀地使用此方法。

在重新设计时,他们也搬到了新的包装组织。它更好地遵循包命名的常规约定。

其他回答

在Android Studio中(在IntelliJ中也是如此),你可以全局地从自动导入提议中排除junit.framework。

您可以在IDE或Project之间设置范围。如果你没有使用JUnit 3的项目,你可以安全地使用IDE作用域。

设置位置:

首选项->编辑器->通用->自动导入

我做了一个粗略的源代码比较,没有严重的变化。在org.junit.Assert中添加了许多注释,并完成了一些重构。唯一的变化是与数组的比较。有一些代码清理,但(恕我直言)没有功能上的变化。

JUnit 3。X: junit.framework.Assert

JUnit 4。X: org.junit.Assert

最好使用最新的版本,特别是在运行带有注释支持的JDK5或更高版本时。

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

从JUnit的第4版开始,框架使用注解来标记测试。因此您不再需要扩展TestCase。但这意味着assert方法不可用。但是您可以对新的Assert类进行静态导入。这就是为什么新类中的所有assert方法都是静态方法。所以你可以这样导入它:

import static org.junit.Assert.*;

在此静态导入之后,您可以不带前缀地使用此方法。

在重新设计时,他们也搬到了新的包装组织。它更好地遵循包命名的常规约定。

我相信他们正在从junit.framework重构到org。维护junit和junit.framework. assert是为了向后兼容。