2个JUnit Assert类之间的差异

时间:2008-11-14 18:49:28

标签: java unit-testing junit junit4 assert

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

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

6 个答案:

答案 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.AssertassertEquals()float同时使用doublejunit.framework.Assert将会抱怨默默地自动装箱。

答案 3 :(得分:5)

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

答案 4 :(得分:3)

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

答案 5 :(得分:0)

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

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

设置位置:

  

首选项->编辑器->常规->自动导入

enter image description here