On dirait le hamcrest org.hamcrest.Matchers
class est très similaire à org.hamcrest.CoreMatchers
(bien qu'il ressemble à Matchers
en a plus). Pourquoi devrais-je choisir d'utiliser CoreMatchers
(à part cela, la classe est légèrement plus petite), et pourquoi ces deux classes sont-elles si similaires?
Les matchers Hamcrest sont divisés en plusieurs modules. Le "noyau" comprend les corrélateurs les plus élémentaires et les classes abstraites nécessaires pour créer d'autres corrélateurs. org.hamcrest.CoreMatchers
inclut les méthodes d'usine pour ces égaliseurs uniquement. Les autres correspondants sont dans le module "bibliothèque" regroupés par types d'objets qu'ils correspondent et sont facultatifs. org.hamcrest.Matchers
inclut les deux ensembles d'apparieurs.
Que devez-vous utiliser? J'importe statiquement tout de ce dernier sans aucun problème. Peut-être que les temps de compilation peuvent prendre un peu plus de temps, mais cela n'a jamais été un problème pour moi. Je mets cela en haut de mes tests unitaires en plus des importations JUnit:
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
Cela donne la meilleure lisibilité dans les méthodes de test.
Si vous utilisez beaucoup Mockito (comme moi), vous faites peut-être:
import org.mockito.Mockito;
ou
static import org.mockito.Mockito.*;
et puisque la classe Mockito
étend la classe Matchers
de Mockito, vous pouvez vous retrouver avec des conflits entre les classes Matchers ou leurs méthodes statiques. Avoir CoreMatchers me permet d'utiliser des CoreMatchers dérivés de JUnit dans la même classe que Mockito, sans avoir à les qualifier complètement à leur point d'utilisation.
Si vous utilisez les tests JUnit d'Android (tests non connectés), les CoreMatcher
semblent être disponibles dans le module déjà inclus junit, tandis que les Matchers
ne le sont pas .
Ainsi, pour économiser les frais généraux et éviter d'importer une autre bibliothèque, envisagez d'utiliser les versions CoreMatcher
de ces classes si elles suffisent:
assertThat(chrome.twiddle(), is(equalTo(0)));
est possible en utilisant uniquement CoreMatcher
s .