różnice między 2 klasami JUnit Assert

257

Framework JUnit zawiera 2 Assertklasy (oczywiście w różnych pakietach), a metody w każdej z nich wydają się bardzo podobne. Czy ktoś może wyjaśnić, dlaczego tak jest?

Klasy, o których mówię to: junit.framework.Asserti org.junit.Assert.

Dónal
źródło
8
W Intellij IDEA możesz wykluczyć junit.framework.*z menu importu statycznego w Editor->General->Auto Import->Exclude from Import and Completion.
jordanpg

Odpowiedzi:

239

Stara metoda (JUnit 3) polegała na oznaczeniu klas testowych poprzez rozszerzenie junit.framework.TestCase. To odziedziczyło junit.framework.Assertsiebie, a klasa testowa zyskała możliwość wywoływania w ten sposób metod asercji.

Od wersji 4 JUnit platforma używa Annotationsdo oznaczania testów. Nie musisz już przedłużać TestCase. Ale to oznacza, że ​​metody asercji nie są dostępne. Ale możesz dokonać statycznego importu nowej Assertklasy. Dlatego wszystkie metody asercji w nowej klasie są metodami statycznymi. Możesz więc zaimportować go w ten sposób:

import static org.junit.Assert.*;

Po tym imporcie statycznym możesz używać tych metod bez prefiksu.

Podczas przeprojektowania przenieśli się również do nowego pakietu, org.junitktóry lepiej przestrzega normalnych konwencji nazewnictwa pakietów.

Memento
źródło
6
Ta odpowiedź nie jest do końca poprawna, możesz dokonać statycznego importu metod z klas junit.framework.Assert i org.junit.Assert. Prawdopodobnie dobrym pomysłem jest jednak trzymanie się klasy org.junit.Assert, ponieważ jest ona nowsza, nieco przepisana i prawdopodobnie przeznaczona jako zamiennik.
Glenn Bech,
75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Preferuj najnowszą wersję, szczególnie przy uruchomionym JDK5 i nowszym z obsługą adnotacji.

ReneS
źródło
19

W rzeczywistości zachodzi zmiana funkcjonalna: org.junit.Assertnarzeka, jeśli użyjesz dwóch argumentów assertEquals()z floatlub double, a junit.framework.Assertpo cichu automatycznie ją zutoksyfikujesz.

David Moles
źródło
5

Uważam, że dokonują refaktoryzacji od junit.frameworkdo org.juniti junit.framework.Assertsą utrzymywane w celu zachowania zgodności wstecznej.

sblundy
źródło
3

Zrobiłem przybliżone porównanie kodu źródłowego i nie ma żadnych poważnych zmian. Dodano wiele komentarzy i dokonano org.junit.Assertpewnych refaktoryzacji. Jedyną zmianą jest porównanie z Arrays. Jest kilka porządków kodu, ale (imho) nie ma zmian funkcjonalnych .

guerda
źródło
1
Uważam, że @David Moles ma rację i byłaby to zmiana funkcjonalna.
orbfish
1

W Android Studio (a więc także w IntelliJ) możesz globalnie wykluczyć junit.frameworkz propozycji automatycznego importu.

Możesz ustawić zakres pomiędzy IDElub Project. Jeśli nie masz projektów korzystających z JUnit 3, możesz bezpiecznie pozostać w zakresie IDE.

Ustawienie pozycji:

Preferencje -> Edytor -> Ogólne -> Automatyczny import

wprowadź opis zdjęcia tutaj

MatPag
źródło