Unterschiede zwischen 2 JUnit Assert-Klassen

257

Das JUnit-Framework enthält zwei AssertKlassen (natürlich in verschiedenen Paketen), und die Methoden für jede Klasse scheinen sehr ähnlich zu sein. Kann jemand erklären, warum das so ist?

Die Klassen, auf die ich mich beziehe, sind: junit.framework.Assertund org.junit.Assert.

Dónal
quelle
8
In Intellij IDEA können Sie junit.framework.*das Dropdown-Menü für den statischen Import in ausschließen Editor->General->Auto Import->Exclude from Import and Completion.
Jordanpg

Antworten:

239

Die alte Methode (von JUnit 3) bestand darin, die Testklassen durch Erweitern zu markieren junit.framework.TestCase. Das hat sich junit.framework.Assertselbst geerbt und Ihre Testklasse hat die Möglichkeit erhalten, die Assert-Methoden auf diese Weise aufzurufen.

Seit Version 4 von JUnit wird das Framework Annotationszum Markieren von Tests verwendet. Sie müssen also nicht mehr verlängern TestCase. Das bedeutet jedoch, dass die Assert-Methoden nicht verfügbar sind. Sie können die neue AssertKlasse jedoch statisch importieren . Aus diesem Grund sind alle Assert-Methoden in der neuen Klasse statische Methoden. Sie können es also folgendermaßen importieren:

import static org.junit.Assert.*;

Nach diesem statischen Import können Sie diese Methoden ohne Präfix verwenden.

Bei der Neugestaltung sind sie auch auf das neue Paket umgezogen, das org.junitden normalen Konventionen für die Paketbenennung besser entspricht.

Mnementh
quelle
6
Diese Antwort ist nicht ganz richtig. Sie können statische Importe von Methoden in den Klassen junit.framework.Assert und org.junit.Assert durchführen. Es ist jedoch wahrscheinlich eine gute Idee, sich an die org.junit.Assert-Klasse zu halten, da sie neuer, leicht umgeschrieben und wahrscheinlich als Ersatz gedacht ist.
Glenn Bech
75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Bevorzugen Sie die neueste Version, insbesondere wenn Sie JDK5 und höher mit Annotation-Unterstützung ausführen.

ReneS
quelle
19

Es gibt tatsächlich eine Funktionsänderung: org.junit.AssertBeschwert sich, wenn Sie das Zwei-Argument assertEquals()mit floatoder verwenden double, während junit.framework.Assertes stillschweigend autobox wird.

David Moles
quelle
5

Ich glaube, sie werden von junit.frameworkbis umgestaltet org.junitund junit.framework.Assertaus Gründen der Abwärtskompatibilität beibehalten.

sblundy
quelle
3

Ich habe einen groben Quellcode-Vergleich durchgeführt und es gibt keine ernsthaften Änderungen. Es wurden viele Kommentare hinzugefügt org.junit.Assertund einige Umgestaltungen vorgenommen. Die einzige Änderung ist der Vergleich mit Arrays. Es gibt einige Code-Bereinigungen, aber es gibt (imho) keine funktionale Änderung .

Guerda
quelle
1
Ich glaube, @David Moles ist korrekt, und dies wäre eine funktionale Änderung.
Orbfish
1

In Android Studio (und damit auch in IntelliJ) können Sie global ausschließen junit.framework Vorschläge für den automatischen Import .

Sie können den Bereich zwischen IDEoder einstellenProject . Wenn Sie keine Projekte haben, die JUnit 3 verwenden, können Sie sicher im IDE-Bereich bleiben.

Einstellposition:

Einstellungen -> Editor -> Allgemein -> Automatischer Import

Geben Sie hier die Bildbeschreibung ein

MatPag
quelle