sembra che la classe hamcrest org.hamcrest.Matchers
è molto simile a org.hamcrest.CoreMatchers
(anche se sembra che Matchers
ha più). Perché dovrei scegliere di usare CoreMatchers
(a parte che sembra che la classe sia leggermente più piccola) e perché queste due classi sono così simili?Differenza tra Matchers hamcrest-biblioteca e CoreMatchers hamcrest-core
risposta
Gli accoppiamenti di Hamcrest sono suddivisi in diversi moduli. Il "nucleo" include gli abbinamenti di base e le classi astratte necessarie per costruire altri giocatori. org.hamcrest.CoreMatchers
include i metodi di fabbrica solo per questi abbinamenti. Gli altri matcher si trovano nel modulo "library" raggruppato in base ai tipi di oggetti che corrispondono e sono opzionali. org.hamcrest.Matchers
include entrambi i set di risultati.
Quale dovresti usare? Importa staticamente tutto da quest'ultimo senza alcun problema. Forse i tempi di compilazione potrebbero richiedere un po 'più di tempo, ma non è mai stato un problema per me. Ho messo questo nella parte superiore del mio test di unità, oltre alle importazioni JUnit:
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
Questo dà la migliore leggibilità nei metodi di prova.
Se si utilizza Mockito un sacco (come faccio io), si potrebbe fare:
import org.mockito.Mockito;
o
static import org.mockito.Mockito.*;
e dal momento che la classe Mockito
estende la classe di Mockito Matchers
, allora si può finire con conflitti tra le classi Matchers o i loro metodi statici. Avere CoreMatchers mi consente di utilizzare CoreMatcher derivati da JUnit nella stessa classe di Mockito, senza doverli qualificare pienamente al loro punto di utilizzo.