Wygląda na to, że klasa hamcrest org.hamcrest.Matchers
jest bardzo podobna do klasy org.hamcrest.CoreMatchers
(chociaż wygląda na to, że ma ona więcej niż jeden numer Matchers
). Dlaczego miałbym używać CoreMatchers
(poza tym, że klasa jest nieco mniejsza) i dlaczego te dwie klasy są tak podobne?Różnica między Matrix hamcrest Matrix i hamcrest Core Core Matchery
Odpowiedz
Matowniki Hamcrest są podzielone na kilka modułów. "Rdzeń" zawiera najprostsze dopasowania i klasy abstrakcyjne wymagane do budowania innych dopasowań. org.hamcrest.CoreMatchers
zawiera fabryczne metody dla tych właśnie matchers. Pozostałe elementy dopasowujące są w module "biblioteka" pogrupowane według typów dopasowanych obiektów i są opcjonalne. org.hamcrest.Matchers
obejmuje oba zestawy dopasowań.
Jakich użyć? Statycznie importuję wszystko z tego ostatniego bez żadnych problemów. Być może czasy kompilacji mogą potrwać nieco dłużej, ale to nigdy nie było problemem dla mnie. Ja to na szczycie moich testów jednostkowych oprócz importu JUnit:
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
Daje najlepszą czytelność w metodach badawczych.
Jeśli używasz Mockito dużo (jak ja), można robić:
import org.mockito.Mockito;
lub
static import org.mockito.Mockito.*;
a ponieważ klasa Mockito
rozciąga Matchers
klasę Mockito, wtedy można zakończyć konfliktami między klasami Matchers lub ich statycznymi metodami. Posiadanie CoreMatchers pozwala mi używać CoreMatchersów opartych na JUnit w tej samej klasie co Mockito, bez konieczności pełnej kwalifikacji w punkcie ich użycia.