2008-11-14 9 views
234

Das JUnit-Framework enthält 2 Assert Klassen (offensichtlich in verschiedenen Paketen) und die Methoden auf jedem scheinen sehr ähnlich zu sein. Kann jemand erklären, warum das so ist?Unterschiede zwischen 2 JUnit Assert-Klassen

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

+7

In IntelliJ IDEA, können Sie 'junit.framework ausschließen. *' Aus dem statischen Import Dropdown in 'Editor-> Allgemein-> Auto Importieren-> Ausschließen von Import und Completion'. – jordanpg

Antwort

221

Die alte Methode (von JUnit 3) sollte die Testklassen durch Erweitern junit.framework.TestCase markieren. Das erbte junit.framework.Assert selbst und Ihre Testklasse gewann die Fähigkeit, die Assert-Methoden auf diese Weise aufzurufen.

Seit Version 4 von JUnit verwendet das Framework Annotations für Markierungstests. Sie müssen also nicht mehr TestCase erweitern. Aber das heißt, die Assert-Methoden sind nicht verfügbar. Sie können jedoch die neue Klasse Assert statisch importieren. Aus diesem Grund sind alle Assert-Methoden in der neuen Klasse statische Methoden. So können Sie es auf diese Weise importieren:

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

Beim Redesign sind sie auch in das neue Paket org.junit umgezogen, das den üblichen Konventionen für die Paketbenennung besser entspricht.

+5

Diese Antwort ist nicht ganz korrekt, Sie können statische Importe von Methoden in der Klasse junit.framework.Assert und org.junit.Assert vornehmen. Es ist jedoch wahrscheinlich eine gute Idee, bei der org.junit.Assert-Klasse zu bleiben, da sie neuer ist, leicht neu geschrieben wurde und wahrscheinlich als Ersatz gedacht ist. –

5

Ich glaube, sie sind Refactoring von junit.framework zu org.junit und junit.framework.Assert wird aus Gründen der Abwärtskompatibilität beibehalten.

68

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Ziehe die neueste, besonders wenn JDK5 und höher mit Annotations Unterstützung ausgeführt wird.

3

Ich habe einen groben Quellcode vergleichen und es gibt keine ernsthaften Änderungen. Viele Kommentare wurden in org.junit.Assert hinzugefügt und einige Refactorings sind abgeschlossen. Die einzige Änderung ist der Vergleich mit Arrays. Es gibt einige Codeaufräumungen, aber es gibt (imho) keine Funktionsänderung.

+1

Ich glaube @David Moles ist korrekt, und das wäre eine funktionale Änderung. – orbfish

17

Es ist in der Tat eine funktionelle Änderung: org.junit.Assert wird sich beschweren, wenn Sie die zweiargumentigen assertEquals() mit float oder double verwenden, während junit.framework.Assert still es AutoBox wird.