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

我所指的课程是: junit.framework.Assert org.junit.Assert

有帮助吗?

解决方案

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

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

import static org.junit.Assert.*;

执行此静态导入后,您可以使用此方法而不使用前缀。

在重新设计时,他们也转移到了新的包org.junit,它更符合包命名的常规约定。

其他提示

JUnit 3.X:junit.framework.Assert

JUnit 4.X:org.junit.Assert

首选最新版本,尤其是在运行带有注释支持的JDK5及更高版本时。

实际上有一个功能上的变化:org.junit.Assert如果您使用assertEquals() floatdouble,则会抱怨,而junit.framework.Assert将默默地自动进行自动装箱。

我认为他们正在从junit.framework重构为org.junit,并且junit.framework.Assert是为了向后兼容而维护的。

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

在Android Studio中(以及IntelliJ中也是如此),您可以从自动导入提案中全局排除junit.framework

您可以在IDEProject之间设置范围。如果您没有使用JUnit 3的项目,则可以安全地使用IDE范围。

设定位置:

  

偏好设置 - <!> gt;编辑 - <!> gt;一般 - <!> gt;自动导入

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top