Framework JUnit zawiera 2 Assert
klasy (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.Assert
i org.junit.Assert
.
Framework JUnit zawiera 2 Assert
klasy (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.Assert
i org.junit.Assert
.
junit.framework.*
z menu importu statycznego wEditor->General->Auto Import->Exclude from Import and Completion
.Odpowiedzi:
Stara metoda (JUnit 3) polegała na oznaczeniu klas testowych poprzez rozszerzenie
junit.framework.TestCase
. To odziedziczyłojunit.framework.Assert
siebie, a klasa testowa zyskała możliwość wywoływania w ten sposób metod asercji.Od wersji 4 JUnit platforma używa
Annotations
do 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 nowejAssert
klasy. Dlatego wszystkie metody asercji w nowej klasie są metodami statycznymi. Możesz więc zaimportować go w ten sposób:Po tym imporcie statycznym możesz używać tych metod bez prefiksu.
Podczas przeprojektowania przenieśli się również do nowego pakietu,
org.junit
który lepiej przestrzega normalnych konwencji nazewnictwa pakietów.źródło
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.
źródło
W rzeczywistości zachodzi zmiana funkcjonalna:
org.junit.Assert
narzeka, jeśli użyjesz dwóch argumentówassertEquals()
zfloat
lubdouble
, ajunit.framework.Assert
po cichu automatycznie ją zutoksyfikujesz.źródło
Uważam, że dokonują refaktoryzacji od
junit.framework
doorg.junit
ijunit.framework.Assert
są utrzymywane w celu zachowania zgodności wstecznej.źródło
Zrobiłem przybliżone porównanie kodu źródłowego i nie ma żadnych poważnych zmian. Dodano wiele komentarzy i dokonano
org.junit.Assert
pewnych refaktoryzacji. Jedyną zmianą jest porównanie zArrays
. Jest kilka porządków kodu, ale (imho) nie ma zmian funkcjonalnych .źródło
W Android Studio (a więc także w IntelliJ) możesz globalnie wykluczyć
junit.framework
z propozycji automatycznego importu.Możesz ustawić zakres pomiędzy
IDE
lubProject
. Jeśli nie masz projektów korzystających z JUnit 3, możesz bezpiecznie pozostać w zakresie IDE.Ustawienie pozycji:
źródło