267

The JUnit framework contains 2 Assert classes (in different packages, obviously) and the methods on each appear to be very similar. Can anybody explain why this is?

The classes I'm referring to are: junit.framework.Assert and org.junit.Assert.

asked Nov 14, 2008 at 18:49
1
  • 8
    In Intellij IDEA, you can exclude junit.framework.* from the static import dropdown in Editor->General->Auto Import->Exclude from Import and Completion. Commented Aug 14, 2015 at 14:03

6 Answers 6

251

The old method (of JUnit 3) was to mark the test-classes by extending junit.framework.TestCase. That inherited junit.framework.Assert itself and your test class gained the ability to call the assert methods this way.

Since version 4 of JUnit, the framework uses Annotations for marking tests. So you no longer need to extend TestCase. But that means, the assert methods aren't available. But you can make a static import of the new Assert class. That's why all the assert methods in the new class are static methods. So you can import it this way:

import static org.junit.Assert.*;

After this static import, you can use this methods without prefix.

At the redesign they also moved to the new package org.junit that follows better the normal conventions for package naming.

Sae1962
1,2981 gold badge17 silver badges33 bronze badges
answered Nov 14, 2008 at 19:04
Sign up to request clarification or add additional context in comments.

1 Comment

This answer is not entirely correct, you can make static imports of methods in the class junit.framework.Assert and org.junit.Assert. It is, however, probably a good idea to stick to the org.junit.Assert class since it is newer , slightly rewritten and probably meant as a replacement.
81

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Prefer the newest one, especially when running JDK5 and higher with annotation support.

Vic
22.3k11 gold badges80 silver badges101 bronze badges
answered Nov 14, 2008 at 19:19

Comments

21

There is in fact a functional change: org.junit.Assert will complain if you use the two-argument assertEquals() with float or double, while junit.framework.Assert will silently autobox it.

answered Jul 31, 2009 at 8:56

Comments

5

I believe they are refactoring from junit.framework to org.junit and junit.framework.Assert is maintained for backwards compatibility.

answered Nov 14, 2008 at 19:00

Comments

3

In Android Studio (and so in IntelliJ too), you can globally exclude junit.framework from auto-import proposal.

You can set the scope between IDE or Project. If you don't have projects which use JUnit 3 you can safely stay with IDE scope.

Setting position:

Preferences -> Editor -> General -> Auto Import

enter image description here

answered Feb 21, 2019 at 13:44

Comments

2

I did a rough source code compare and there are no serious changes. A lot of comments were added in org.junit.Assert and some refactorings are done. The only change is the comparison with Arrays. There are some code cleanups, but there's (imho) no functional change.

shyam
9,3964 gold badges32 silver badges45 bronze badges
answered May 28, 2009 at 8:56

1 Comment

I believe @David Moles is correct, and this would be a functional change.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.