2个JUnit Assert类之间的差异

Dón*_*nal 253 java junit unit-testing assert junit4

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

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

Mne*_*nth 235

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

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

import static org.junit.Assert.*;
Run Code Online (Sandbox Code Playgroud)

在此静态导入之后,您可以使用此方法而不使用前缀.

在重新设计时,他们也转向了新的软件包org.junit,该软件包更符合软件包命名的常规约定.

  • 这个答案并不完全正确,您可以在类junit.framework.Assert和org.junit.Assert中进行方法的静态导入.但是,坚持使用org.junit.Assert类可能是一个好主意,因为它更新,稍微重写并且可能意味着替代. (6认同)

Ren*_*neS 74

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

更喜欢最新版本,特别是在运行带有注释支持的JDK5及更高版本时.


Dav*_*les 19

实际上有一个功能上的变化:org.junit.Assert如果你使用assertEquals()带有floator 的两个参数会抱怨double,同时junit.framework.Assert会默默地自动装箱.


sbl*_*ndy 5

我相信他们正在重构junit.framework,org.junit并且junit.framework.Assert为了向后兼容而维护.